我正在尝试使用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);
loadAll
的JavaDoc 读取
解析流中的所有 YAML 文档并生成相应的 Java 对象。仅当调用迭代器时才会解析文档。
所以你得到的
Iterable
不是一个保存你的对象的容器,而只是一个查询数据的临时接口。您需要:
dumpAll
或 loadAll
查询下一个对象,修改它,然后返回它。