如何使用SnakeYaml写入YAML文件?

Jon*_*ski 11 java file snakeyaml fileoutputstream output

请考虑以下代码:

public static void dumpObjectToYaml(String key, Object O, String path) throws IOException
{
    Map<String, Object> data = new HashMap<>();
    data.put(key, O);

    File F = new File(path);
    F.mkdirs();
    F.createNewFile();

    //write data to File
}
Run Code Online (Sandbox Code Playgroud)

此方法旨在将给定键处的给定Object O写入给定路径的YAML文件中.(如果它不存在则会被创建.)但显然主要部分仍然缺失.

现在按照SnakeYaml的文档,创建一个YAML我只需要创建一个地图并将右边的对象放入对象中,我这样做了.

但无处(至少我没有看到它)被描述如何在某个路径上创建一个yaml文件!

我发现的唯一一件事是:

"Yaml.dump(对象数据)方法接受Java对象并生成YAML文档"

public void testDump() 
{
    Map<String, Object> data = new HashMap<String, Object>();
    data.put("name", "Silenthand Olleander");
    data.put("race", "Human");
    data.put("traits", new String[] { "ONE_HAND", "ONE_EYE" });
    Yaml yaml = new Yaml();
    String output = yaml.dump(data);
    System.out.println(output);
}
Run Code Online (Sandbox Code Playgroud)

"Yaml.dump(对象数据,Writer输出)将生成的YAML文档写入指定的文件/流."

public void testDumpWriter() 
{
   Map<String, Object> data = new HashMap<String, Object>();
   data.put("name", "Silenthand Olleander");
   data.put("race", "Human");
   data.put("traits", new String[] { "ONE_HAND", "ONE_EYE" });
   Yaml yaml = new Yaml();
   StringWriter writer = new StringWriter();
   yaml.dump(data, writer);
   System.out.println(writer.toString());
}
Run Code Online (Sandbox Code Playgroud)

但是,尽管它在第二位代码中确切地说明了它,它似乎并不支持某个文件的操作,但它肯定没有显示如何做到这一点.

仅仅是我还是文档感觉非常神秘和指定?其中一半是关于我从未听说过的特殊应用.只是通过观察它我感到非常愚蠢,这让我很生气.

无论如何; 我真的很感激你能给我的任何帮助.

ig0*_*774 19

如果我已经理解了这个问题,它似乎与YAML或SnakeYAML本身没有任何关系,而是与你如何用Java编写特定文件有关.基本上,您复制的第二个示例是如何将对象转储到任意java.io.Writer对象(尽管它们使用a,StringWriter因为它不会向磁盘写入任何内容).如果要修改此示例以写入特定文件,可以通过使用a来实现FileWriter,如下所示:

public void testDumpWriter() {
   Map<String, Object> data = new HashMap<String, Object>();
   data.put("name", "Silenthand Olleander");
   data.put("race", "Human");
   data.put("traits", new String[] { "ONE_HAND", "ONE_EYE" });

   Yaml yaml = new Yaml();
   FileWriter writer = new FileWriter("/path/to/file.yaml");
   yaml.dump(data, writer);
}
Run Code Online (Sandbox Code Playgroud)

这将把地图转储data到YAML文件.请注意,通常不需要在打开文件之前自己创建文件,FileWriter因为FileWriter它将为您处理.

  • 这里没有太多的空间来解释,但是您可以通过创建“DumperOptions”对象并将其设置为使用“FlowStyle.BLOCK”来强制每行显示该项目。有关示例,请参阅代码 [来自 `testDumperOptionsFlowStyle()`](https://code.google.com/p/snakeyaml/source/browse/src/test/java/examples/DumpExampleTest.java#108)。 (2认同)

Her*_*ūns 5

以预期的 yaml 格式进行漂亮的打印(没有大括号,就像接受的答案一样):

public static void saveYamlToFile(final Object object) throws IOException {
    final DumperOptions options = new DumperOptions();
    options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
    options.setPrettyFlow(true);
    final Yaml yaml = new Yaml(options);

    final FileWriter writer = new FileWriter("/path/to/file.yaml");
    yaml.dump(object, writer);
}
Run Code Online (Sandbox Code Playgroud)