java - 如何更新 YAML 文件而不覆盖

标签 java yaml objectmapper

我想更新(不覆盖)我现有的 yaml 文件: YAML 文件如下所示:

firstName: "John"
#text here
lastName: "Doe"
age: 20
#This is important
city: "XYZ"

我有java类:

 ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        String path = "E:/customer.yml";
        Customer customer = objectMapper.readValue(new File(path), Customer.class);
        customer.setAge(50);
        objectMapper.writeValue(new FileWriter(path), customer);

和 POJO 模型:

private String firstName;
private String lastName;
private int age;
//getters setters

如何更新 yaml 文件而不覆盖它?实际上,运行这些类后,值 Age 被修改,但其他属性如 city 被删除。我知道,我可以更新我的 POJO 模型,并添加城市,但就我而言,我不确定文件中有什么。 我可以将文件转换为字符串,并替换所需的数据,但它看起来不专业。

最佳答案

因为你不知道你的POJO结构并且不想丢失任何数据。我建议您应该将文件读取到 map 。在 POJO 中创建一个映射并尝试使用注释 @JsonAnyGetter@JsonAnySetter。它们应该仍然可以工作,因为相同的库也可以用于 JSON。

我认为没有“更新”的可能性。之后您可以读取并覆盖现有文件。这意味着您将失去评论。除非您要实现自己的解决方案 - 读取整个文件,找到 char # 并保存这些行。

关于java - 如何更新 YAML 文件而不覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58995047/

相关文章:

java - 将空 Jackson 节点反序列化到集合时遇到问题

java - ObjectMapper ConvertValue 错误 java.util.ArrayList[0]->java.util.LinkedHashMap ["id"]

Java 用户输入错误处理

java - Spring + Tiles 3 JSP 未渲染

emacs - 输入缩进上一行?

swift - 如何使用 ObjectMapper 将枚举的 rawValue 分配给变量?

java - 我有一个随机颜色程序,我需要它快速切换颜色

java - 一组可变参数?

opencv - 在OpenCV中读取YAML文件

azure-devops - Azure DevOps - 动态评估需求名称