Comment puis-je écrire dans un fichier YAML à l'aide de SnakeYaml?
Considérons le code suivant:
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
}
Cette méthode vise à écrire la donnée de l'Objet O à la clé donnée, dans le fichier YAML au chemin d'accès donné. (si elle n'existe pas, il est créé.) Mais, évidemment, la partie principale est toujours manquant.
À la suite d' la documentation de SnakeYaml, pour créer un YAML j'ai seulement besoin de créer une carte et de la mettre dans le Objets à la droite, je l'ai fait.
Mais nulle part (à moins que je ne le vois pas) est décrit comment créer un fichier yaml à un certain chemin!
La seule chose que j'ai trouvée est:
"Le Yaml.dump(Object data) méthode accepte un objet Java, et produit un YAML document"
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);
}
et
"Yaml.dump(données de l'Objet, l'Écrivain de sortie) va écrire le produit YAML document dans le fichier spécifié/stream".
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());
}
Mais encore, même s'il dit exactement ce qu'à la deuxième partie du code, il ne semble pas à l'appui de la manipulation d'un fichier donné et ce n'est certainement pas montré comment le faire.
Est-ce seulement moi ou la documentation sentir très cryptique et spécifié? La moitié est sur les applications que je n'ai jamais entendu parler. Je me sens vraiment stupide juste en le regardant et il me fait une sorte de colère.
De toute façon; je serais vraiment reconnaissant de toute aide que vous pourriez me donner.
OriginalL'auteur Jonas Bartkowski | 2014-07-25
Vous devez vous connecter pour publier un commentaire.
Si j'ai bien compris la question, il ne semble pas avoir quelque chose à voir avec YAML ou SnakeYAML en soi, mais à voir avec la façon dont vous écrivez à un fichier spécifique à Java. En fait, ce que le deuxième exemple que vous avez copié est montrer, c'est comment vider un objet arbitraire
java.io.L'écrivain
objet (même s'ils utilisent unStringWriter
que ce ne sera pas rien écrire sur le disque). Si vous souhaitez modifier cet exemple pour écrire dans un fichier particulier, vous pouvez le faire en faisant usage d'unFileWriter
, comme suit:Qui provoque le vidage de la carte
data
dans un fichier YAML. Notez qu'il n'est normalement pas nécessaire de créer le fichier vous-même avant l'ouverture de laFileWriter
comme leFileWriter
va gérer pour vous.Mais maintenant j'ai un autre problème. Quand je fais seuls les deux premiers de données.put (), j'obtiens ceci: {race: Humain, nom: Silenthand Olleander} dans le fichier YAML. Seulement si j'ajoute une troisième, je l'obtenir: traits de caractère: [ONE_HAND, ONE_EYE] race: Humain nom: Silenthand Olleander comme il le devrait. Avez-vous des idées de pourquoi il en est?
C'est toujours "bonne", comme je peux lire le droit des valeurs de leurs champs, mais cette disposition est moins lisible que lorsque chaque valeur a sa propre ligne. Je suppose que c'est pour rendre les documents plus compact, mais je préfère être en mesure de le changer.
Il n'y a pas beaucoup d'espace à expliquer ici, mais vous pouvez forcer l'élément par ligne, la création d'un
DumperOptions
objet et le mettre à utiliserFlowStyle.BLOCK
. Voir le codetestDumperOptionsFlowStyle()
pour un exemple de cette.Qui ont travaillé. Merci beaucoup! Vous avez corrigé tous mes problèmes 😀
OriginalL'auteur ig0774