gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:16:25 27 4
gpt4 key购买 nike

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

我的java源文件如下:

示例.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'

但是我收到“流关闭”异常。有人能发现问题吗?

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

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

最佳答案

您需要找到正确的路径。

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

由于您使用 maven,放置文件的正确方法是在 src/main/resources/com/example/mypackage/config.yaml 中。但是,如果您希望 yaml 文件直接位于 src/main/resources 中,则必须使用绝对路径 "/config.yaml" (绝对,在 JAR 的上下文中)。

或者,可能更干净,使用类加载器来查询相对路径:

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

这将与 src/main/resources 中的 config.yaml 一起使用。

关于Java:从项目文件夹下的文件加载数据失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40217679/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com