我正在尝试使用org.yaml.snake读取.yaml
文件(位于我的项目文件夹下,不位于同一个包下的java文件下)图书馆。
我的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'
但是我得到“流关闭”异常。有人能发现问题吗?
编辑:我添加了@SuppressWarnings("unchecked")
,现在又说file not found
,这是一个不同的问题。我怀疑错误是一个路径问题,它无法找到我的config.yaml
。
任何人都可以了解如何引用项目文件夹下的文件?
答案 0 :(得分:2)
你需要正确的道路。
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一起使用。