C’est la première fois que je travaille avec des fichiers yaml
. La première chose à laquelle j’ai pensé est que j’ai cherché à trouver une bibliothèque capable de m'aider à analyser le fichier.
J'ai trouvé deux bibliothèques YamlBean
et SnakeYaml
je ne suis pas sûr de celle que je vais utiliser.
Voici un exemple du fichier que j'essaye d'analyser
users:
user1:
groups:
- Premium
user2:
groups:
- Mod
user3:
groups:
- default
groups:
Mod:
permissions:
test: true
inheritance:
- Premium
default:
permissions:
test.test: true
inheritance:
- Mod
Admin:
permissions:
test.test.test: true
inheritance:
- Mod
Le fichier va changer de façon dynamique, donc je ne sais pas combien d'utilisateurs ou de groupes le fichier contiendra.
Les informations que je voudrais extraire de ceci sont le nom d'utilisateur et le groupe comme celui-ci
user1 Premium
user2 Mod
user3 default
et des groupes seulement les noms de groupe, comme ceci
Mod
default
Admin
Quelqu'un pourrait-il me faire commencer ici? et quelle est la meilleure bibliothèque à utiliser pour cela? YamlBean ou SnakeYaml.
Je suppose que j'ai besoin de sauvegarder les informations dans quelque chose que je pourrais facilement parcourir.
J'ai fini par utiliser SnakeYaml et j'ai créé des chaînes pour résoudre mon problème.
Chargez le fichier yaml dans Object
puis dans un Map
, puis divisez le résultat du Map
en String[]
puis dans une boucle for
, je lis le nom du String[]
. J'ai fait la même chose avec les groupes.
Je sais qu'il existe de meilleures solutions, mais c'est suffisant pour ce projet.
Merci à tous pour les réponses.
Vous pouvez également utiliser module Jacksons YAML .
Pour l'utiliser, vous aurez besoin de quelques cours. Les classes de modèle qui porteront le contenu de votre fichier et la classe qui se charge de lire le fichier YAML.
La classe de modèle racine pourrait ressembler à ceci:
public class MyYamlFile {
@JsonProperty
private List<User> users;
@JsonProperty
private List<Group> groups;
// getter methods ommitted
}
La classe utilisateur (*):
public class User {
@JsonProperty
private List<String> name;
@JsonProperty
private List<GroupType> groups;
// getter methods ommitted
}
Le GroupType peut être un Enum contenant tous les types de groupes possibles:
public enum GroupType {
Premium, Mod, Default
}
N'oubliez pas que les entrées enum sont sensibles à la casse. Donc, "premium" ne fonctionnera pas. Vous pouvez construire toutes vos classes de modèle de cette façon. Chaque sous-entrée doit avoir sa propre classe de modèle.
Passons maintenant à la partie où vous pouvez lire ce fichier YAML:
public MyYamlFile readYaml(final File file) {
final ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); // jackson databind
return mapper.readValue(file, MyYamlFile.class);
}
Comme vous pouvez le constater, cette partie est vraiment chouette, car vous n’avez pas besoin de beaucoup. L'instance de fichier contient votre fichier YAML. Vous pouvez en créer un comme ceci:
File file = new File("path/to/my/yaml/usersAndGroups.yaml");
Au lieu de File
, la méthode readValue
prend également en charge InputStream
, Java.io.Reader
, String
(avec tout le contenu), Java.net.URL
et tableau d'octets. Vous devriez trouver quelque chose qui vous convient.
(*) Vous devriez envisager de changer la structure de votre fichier YAML, car je ne pense pas qu'il soit possible d'utiliser des clés dynamiques avec Jackson (peut-être que quelqu'un en sait plus à ce sujet):
users:
- name: user1
groups:
- Premium
- name: user2
groups:
- Mod
- name: user3
groups:
- Default
groups:
....
YamlBean est inclus dans DMelt Java environnement de calcul numérique ( http://jwork.org/dmelt/ ). Vous pouvez créer des fichiers Yaml à l'aide de la classe jhplot.io.HFileYAML. qui crée une carte clé-valeur et enregistre en tant que fichier yaml.