有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java YAML文件:读取YAML文件并以相同格式写入文件

我有一个Yaml文件,格式如下:

连接器:
关键词1:测试
键2:22
键3:Strringname
关键4:测试功能

当我试图读取文件并将其写入另一个文件时,格式是不同的。 !!包名 连接器:{key1:Test,key2:22 ,键3:Strringname,键4:testingfunction}

下面是我用来读取和写入文件的代码:

             Map<String, Object> data = new HashMap<String, Object>();
             data.put(key1, value1);
             DumperOptions options = new DumperOptions();            
             options.setIndent(4);
             options.setDefaultFlowStyle(DumperOptions.FlowStyle.AUTO);
             options.setPrettyFlow(true);
             Yaml yaml = new Yaml();
             InputStream in =  new FileInputStream(new File(FIle name));
             Prop cc = yaml.loadAs(in,Prop.class);
             cc.getconnector().setkey3(Strringname);
             Writer fwriter = new OutputStreamWriter(new FileOutputStream(File name), "UTF-8");
             yaml.dump(cc, fwriter); 

以相同的格式编写文件的任何建议


共 (1) 个答案

  1. # 1 楼答案

    如果您希望以块样式进行映射,请使用DumperOptions.FlowStyle.BLOCK。你还需要告诉Yaml构造函数你的options–现在,他们什么都不做

    要删除根标记并为Yaml提供选项,请添加

    final Representer representer = new Representer();
    representer.addClassTag(Prop.class, Tag.MAP);
    Yaml yaml = new Yaml(representer, options);
    

    这将类Prop的标记设置为!!map,这是映射的默认YAML标记。除非以规范的方式输出,否则将忽略此选项


    尽管如此,重要的是:一般来说,您无法确保格式保持不变。SnakeYAML不支持这一点,从技术上讲,这样做违反了规范。密钥将始终按照Prop类中定义的顺序写入,而不是按照它们在原始文件中出现的顺序写入。反序列化会删除空白、注释和其他格式细节等信息

    如果数据中有Map,则键的顺序将是任意的(如:您无法定义或更改它)。如果原始文档包含... -,则该信息将丢失。如果原始文档包含带有''""的标量,则该信息将丢失

    您只能定义一致的输出行为(即定义选项并始终使用它们),但如果输入使用不同的样式,则该样式将始终丢失