如何使用SnakeYaml写入YAML文件?

时间:2014-07-25 06:38:27

标签: java file output fileoutputstream snakeyaml

请考虑以下代码:

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
}

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

现在关注the documentation of SnakeYaml,创建一个YAML我只需要创建一个地图并放入右键的对象,我做了。

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

我发现的唯一一件事就是:

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

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);
}

&#34; Yaml.dump(对象数据,Writer输出)会将生成的YAML文档写入指定的文件/流。&#34;

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());
}

但是,尽管它在第二位代码中确切地说明了这一点,但它似乎并不支持对某个文件的操作,并且它当然没有显示如何执行它。

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

总之;我非常感谢你能给我的任何帮助。

3 个答案:

答案 0 :(得分:13)

如果我已经理解了这个问题,那么它似乎与YAML或SnakeYAML本身无关,而是与您如何使用Java编写特定文件有关。基本上,您复制的第二个示例显示的是如何将对象转储到任意java.io.Writer对象(尽管它们使用StringWriter,因为这不会向磁盘写入任何内容)。如果要修改此示例以写入特定文件,可以通过使用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);
}

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

答案 1 :(得分:1)

要以预期的yaml格式进行漂亮的打印(不使用花括号,如接受的答案所示):

users/{user.id}/

答案 2 :(得分:0)

另一种写数据的方式

 Map<String, String> map = new HashMap<>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        map.put("key3", "value3");

        YamlWriter writer = new YamlWriter(new FileWriter("test.yml"));
        writer.write(map);
        writer.close();

输出:

  key1: value1
  key2: value2
  key3: value3

对于我来说,在这种情况下,我看到了更具可读性的输出。从第一个解决方案中,我们将看到 这样的输出:

{key1: value1, key2: value2, key3: value3}

如果我们有很多数据,将很难读取

P.S。我们需要一些依赖

    <dependency>
        <groupId>com.esotericsoftware.yamlbeans</groupId>
        <artifactId>yamlbeans</artifactId>
        <version>1.13</version>
    </dependency>