gpt4 book ai didi

Java:解析 .yaml 文件 [如果可能,使用 Snake.yaml]

转载 作者:行者123 更新时间:2023-12-01 09:19:13 29 4
gpt4 key购买 nike

我正在尝试从 .yaml 文件加载数据,其中保存了两台计算机的 IP 地址和端口。我的 .yaml 文件如下:

config.yaml

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

我将其放在我想要加载的项目文件夹下(与该类不在同一个包中)。然而,到目前为止我所尝试的一切都不起作用。

最后,我将配置文件放在 src/main/resources 下并尝试了以下操作:

private void loadFromFile() throws FileNotFoundException {
Yaml yaml = new Yaml();
ArrayList<String> key = new ArrayList<String>();
ArrayList<String> value = new ArrayList<String>();

try {
InputStream ios = getClass().getResourceAsStream("/config.yaml");

// Parse the YAML file and return the output as a series of Maps and Lists
Map<String, Object> result = (Map<String, Object>) yaml.load(ios);
for (Object name : result.keySet()) {

key.add(name.toString());
value.add(result.get(name).toString());
}

} catch (Exception e) {
e.printStackTrace();
}

System.out.println(key + " : " + value);
}

但这也不起作用。我收到“Stream Closed”错误,但它没有加载任何内容。

有人知道谁来解决这个问题吗?

P.S.:我被告知要使用 Snake-yaml 库,并且我无法下载任何其他库,以防万一。

最佳答案

这很可能是因为找不到文件 config.yaml。要进行验证,您应该尝试从 ios InputStream 打印数据。您也可以调用

URL url = getClass().getResource('/config.yaml');

并打印 url 以查看 Java 返回的路径。

当您调用 class.getResource() 时,预计会在与该类相同的包中找到该文件。如果 YAML 文件与包结构处于同一级别,那么您应该使用

.getClass().getClassLoader().getResourceAsStream() instead.

即对于 com.abc.def.MyClass.getClass().getResourceAsStream(),该文件应位于/com/abc/def/文件夹中。

即对于 com.abc.def.MyClass.getClass().getClassLoader().getResourceAsStream(),该文件应与/com 位于同一文件夹中。

编辑

在资源字符串中使用前导斜杠,与使用 getClassLoader() 相同。因此,在您的情况下,config.yaml 应该位于类路径的顶层。

关于Java:解析 .yaml 文件 [如果可能,使用 Snake.yaml],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40279501/

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