web-dev-qa-db-ja.com

SnakeYamlを使用してYAMLファイルに書き込む方法を教えてください。

次のコードを検討してください。

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

しかし、それでも、コードの2番目のビットでは特定のファイルの操作をサポートしていないようであり、その方法は明らかに示されていません。

それは私だけですか、それともドキュメントは非常に不可解で指定されていると思いますか?その半分は、私が聞いたこともない特別なアプリケーションに関するものです。見ているだけで本当に馬鹿な気分になり、怒ってしまいます。

とにかく;どうぞよろしくお願いいたします。

12

質問を理解していれば、YAMLやSnakeYAML自体には何の関係もないようですが、Javaで特定のファイルに書き込む方法に関係しています。基本的に、コピーした2番目の例が示すのは、オブジェクトを任意の 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を開く前にファイルを自分で作成する必要は通常ありません。

18
ig0774

データを書き込む別の方法

 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}

大量のデータがあると読みづらくなる

追伸依存関係が必要です

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