13

考虑以下代码:

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
}

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

现在按照SnakeYaml 的文档,要创建 YAML,我只需要创建一个映射并将对象放入正确的键中,我就是这样做的。

但是没有任何地方(至少我没有看到)描述了如何在某个路径创建 yaml 文件!

我唯一发现的是:

“Yaml.dump(Object data) 方法接受一个 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);
}

“Yaml.dump(Object data, Writer output) 将生成的 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());
}

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

只有我还是文档感觉非常神秘和指定?其中一半是关于我从未听说过的特殊应用。光是看着我就觉得自己很笨,这让我有点生气。

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

4

3 回答 3

22

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

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

于 2014-07-25T07:52:34.833 回答
3

另一种写入数据的方法

 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}

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

PS我们需要一些依赖

    <dependency>
        <groupId>com.esotericsoftware.yamlbeans</groupId>
        <artifactId>yamlbeans</artifactId>
        <version>1.13</version>
    </dependency>
于 2019-09-12T07:20:34.280 回答
3

以预期的 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);
}
于 2020-06-10T14:10:28.197 回答