请考虑以下代码:
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());
}
但是,尽管它在第二位代码中确切地说明了这一点,但它似乎并不支持对某个文件的操作,并且它当然没有显示如何执行它。
仅仅是我还是文档感觉非常神秘和指定?其中一半是关于我从未听说过的特殊应用。我只是看着它感到非常愚蠢,这让我很生气。
总之;我非常感谢你能给我的任何帮助。
答案 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>