Snakeyaml loadAll,修改数据,然后dumpAll

问题描述 投票:0回答:1

我正在尝试使用snakeyaml读取yaml文件,修改一些值,然后将其写入另一个文件。我在 1 个文件中有多个文档(除以

---
),所以我需要使用
loadAll
读取文件,然后使用
dumpAll
写入文件,我的问题是我无法让它工作,但一个简单的
 load
dump
工作正常(当然我必须删除多个文档并只保留一个)

如果 yaml 仅包含一个文档,则这里是仅使用

load
dump
的工作代码。

Yaml yaml = new Yaml();
InputStream inputStream = this.getClass()
        .getClassLoader()
        .getResourceAsStream("old.yml");
Map<String, Object> data = yaml.load(inputStream);
modifyData(data);
FileWriter writer = new FileWriter("new.yml");
yaml.dump(data, writer);

现在这是我尝试使用

loadAll
dumpAll
时的实现,一旦我使用
dumpAll
,我得到的只是一个空文件。

Yaml yaml = new Yaml();
InputStream inputStream = this.getClass()
        .getClassLoader()
        .getResourceAsStream("old.yml");
Iterable<Object> data = yaml.loadAll(inputStream);

for (Object object : data ) {
    modifyData((Map<String, Object>) object);
}

FileWriter writer = new FileWriter("new.yml");
yaml.dumpAll(data.iterator(), writer);
java yaml snakeyaml
1个回答
0
投票

loadAll

JavaDoc 读取

解析流中的所有 YAML 文档并生成相应的 Java 对象。仅当调用迭代器时才会解析文档。

所以你得到的

Iterable
不是一个保存你的对象的容器,而只是一个查询数据的临时接口。您需要:

  • 修改对象时将其存储在列表中,然后将该列表交给
    dumpAll
  • 实现一个迭代器,从
    loadAll
    查询下一个对象,修改它,然后返回它。
© www.soinside.com 2019 - 2024. All rights reserved.