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 楼答案
如果您希望以块样式进行映射,请使用
DumperOptions.FlowStyle.BLOCK
。你还需要告诉Yaml
构造函数你的options
–现在,他们什么都不做要删除根标记并为
Yaml
提供选项,请添加这将类
Prop
的标记设置为!!map
,这是映射的默认YAML标记。除非以规范的方式输出,否则将忽略此选项尽管如此,重要的是:一般来说,您无法确保格式保持不变。SnakeYAML不支持这一点,从技术上讲,这样做违反了规范。密钥将始终按照
Prop
类中定义的顺序写入,而不是按照它们在原始文件中出现的顺序写入。反序列化会删除空白、注释和其他格式细节等信息如果数据中有
Map
,则键的顺序将是任意的(如:您无法定义或更改它)。如果原始文档包含...
或-
,则该信息将丢失。如果原始文档包含带有''
或""
的标量,则该信息将丢失您只能定义一致的输出行为(即定义选项并始终使用它们),但如果输入使用不同的样式,则该样式将始终丢失