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

Java: Parsing .yaml files [using snake.yaml if possible]

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

config.yaml

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

我把它放在项目文件夹下(不在与 class 相同的包中),我想从那里加载。但是,到目前为止我尝试的任何方法都没有用。

最后,我将配置文件放在 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。要验证,您应该尝试从 InputStream ios 打印数据。您也可以致电

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

并打印 url 以查看路径 Java returns。

当您调用 class.getResource() 时,预计会在与 class 相同的包中找到该文件。如果 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 应该位于 class 路径的顶层。