Как написать в файл YAML с помощью 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
}

Этот метод нацелен на запись данного объекта O в данный ключ, в файл YAML по заданному пути. (если он не существует, он создается.) Но очевидно, что основная часть все еще отсутствует.

Теперь, следуядокументации SnakeYaml , для создания 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);
}

И

"Ямл.дамп (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());
}

Но все же, несмотря на то, что он говорит именно это во втором бите кода, он, похоже, не поддерживает манипуляции с определенным файлом, и это конечно, не показали, как это делается.

Это только я или документация кажется очень загадочной и конкретной? Половина из них касается специальных приложений, о которых я никогда даже не слышал. Я чувствую себя очень глупо, просто глядя на него, и это меня немного злит.

Во всяком случае, я был бы очень признателен за любую помощь, которую вы могли бы мне оказать.
1 9

1 ответ:

Если я правильно понял вопрос, он, похоже, не имеет ничего общего с 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 будет обрабатывать это для вас.