Java: 从位于项目文件夹下的文件加载数据失败

Java: Loading data from a file located under project folder fails

我正在尝试读取一个.yaml文件(位于我的项目文件夹下,与下面的java文件在同一个包下) 通过使用 org.yaml.snake 库。

我的java源文件如下:

sample.java

private void readAndLoadFromConfigFile() {
        Yaml yaml = new Yaml();
        InputStream inputStream = null;
        try {
            inputStream = getClass().getResourceAsStream("config.yaml");
            @SuppressWarnings("unchecked")
            Map<String, Map<String, String>> values = (Map<String, Map<String, String>>) yaml.load(inputStream);
            for (String key : values.keySet()) {
                Map<String, String> subValues = values.get(key);
                logger.info(key);

                for (String subValueKey : subValues.keySet()) {
                    logger.info(String.format("\t%s = %s", subValueKey, subValues.get(subValueKey)));
                }
            }

            inputStream.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

config.yaml是:

ip_addresses:
firstMachineAddress : '162.242.195.82'
secondMachineAddress : '50.31.209.229'
ports:
firstTargetPort : '4041'
secondTargetPort : '5051'

但是我得到 "stream closed" 异常。谁能发现问题?

编辑: 我添加了 @SuppressWarnings("unchecked"),现在它显示 file not found,这是一个不同的问题。我怀疑错误是路径问题,它找不到我的 config.yaml

任何人都可以提供有关如何引用项目文件夹下的文件的想法?

你需要走对路。

getClass().getResourceAsStream("...") 加载相对于当前 class 所在路径的文件(因为您使用 class 来查询资源)。因此,如果您的 class 位于名为 com.example.mypackage 的包中,并且您提供了一个字符串 "config.yaml",则将搜索该文件 相对于 class 包文件夹.

由于您使用 Maven,放置文件的正确方法是 src/main/resources/com/example/mypackage/config.yaml。但是,如果你想让 yaml 文件直接位于 src/main/resources,你必须使用 absolute 路径 "/config.yaml" (absolute 在您的 JAR 上下文中,即)。

或者,可能更简洁,使用 class 加载器查询相对路径:

getClass().getClassLoader().getResourceAsStream("config.yaml");

这将与 config.yaml 一起 src/main/resources