JAR 的 target/classes 文件夹中不存在文件,本应从资源项目文件夹中读取

File does not exist in target/classes folder of JAR, meant to be read from resources project folder

我正在努力阅读。来自我已部署代码的 Java 项目中资源文件夹中的配置。我可以从我的本地笔记本电脑读取,但在部署为 JAR .manifest 文件后,它说路径不存在。

所以我的 Java maven 项目 str: src/main/java/.. 和配置路径如下:

Java 读取此配置的代码,其中 file.exists() 总是 returns false。

试用 1:配置路径为:src/main/resources/config.yaml.

File configPath = new File(Objects.requireNonNull(getClass().getClassLoader().getResource("config.yaml")).getFile());
if (!configPath.exists()) {
        Log("ERROR", "Config file does not exist "); // this is printed
      }

试用2:配置路径为src/main/resources/feed/configs/config.yaml.

File dir = new File(Objects.requireNonNull(getClass().getClassLoader().getResource("feed/configs")).getFile());
if (!dir.exists()) {
        Log("ERROR", "Config folder does not exist, "ERROR"); // THIS IS PRINTED 
        return;
      }
File[] configFiles = configPath.listFiles(); // NOT EXECUTED AS ABOVE IS RETURNED

既然你已经添加了 maven 标签,我假设你正在使用 maven。

由于 .yaml 位于您应该使用的资源文件夹中 getResourceAsStream()

/src/main/resources/config.yaml:

first: value1
second: value2

读取文件及其内容:

import java.util.Properties;
import java.io.InputStream;
import java.io.IOException;

public class Example {

    InputStream inputStream = null;
    final Properties properties = new Properties();

    public Example() {
        try {
            inputStream = 
                this.getClass().getClassLoader().getResourceAsStream("config.yaml");
            properties.load(inputStream);
        } catch (IOException exception) {
            LOG("ERROR", "Config file does not exist ");
        } finally {
            if (inputStream != null){
                try {
                    inputStream.close();
                } catch (Exception e) {
                    LOG("ERROR", "Failed to close input stream");
                }
            }
        }
     }

    public printValues(){
        LOG("INFO", "First value is: " + properties.getProperty("first"));
    }
}