【问题标题】:How to update YAML file, without overriding如何在不覆盖的情况下更新 YAML 文件
【发布时间】:2019-11-22 13:15:54
【问题描述】:

我想更新(不覆盖)我现有的 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 模型并添加城市,但就我而言,我不确定文件中有什么。 我可以将文件转换为字符串,并替换所需的数据,但它看起来并不专业。

【问题讨论】:

  • 这可能会对您有所帮助。 Java - Update the existing Yaml file
  • 哲学评论... yaml 是为人类编写和编辑而设计的。所以,如果你需要这个,可能你做错了什么。

标签: java yaml objectmapper


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多