Comme il n'y a pas de concept d'une section dans la classe Properties
, on aurait pu trouver un moyen de trouver la section du fichier de propriétés qui est voulu.
Une approche possible serait d'obtenir le Set
de clés, et de trouver ceux qui contient le préfixe qui est désiré. Cela ressemblerait à l'application d'un filtre sur les clés de la propriété et à la sélection des clés souhaitées. Dans ce cas, nous pouvons penser au préfixe comme étant l'entrée séparée par des points dans le fichier de propriétés.
Voici un petit code exemple pour démontrer l'idée générale: (. Le code est pas très agréable car Properies
est pas genericized)
Properties p = new Properties();
p.put("hello.world", "42");
p.put("hello.earth", "1");
p.put("abc.def", "3");
p.put("def.ghi", "5");
// Go through the keys in the property.
for (Object propKey : p.keySet()) {
String key = (String)propKey;
// Select the keys with the prefix "hello."
if (key.startsWith("hello.")) {
System.out.println(key + ", " + p.getProperty(key));
}
}
Sortie:
hello.world, 42
hello.earth, 1
En l'exemple ci-dessus, l'un n'a pas chargé les entrées du fichier de propriétés externe, mais cela peut être réalisé trivialement en utilisant le Properties.load
méthode, comme mentionné précédemment dans les autres réponses.
Un peu d'une approche différente, où les clés sont filtrés par le préfixe souhaité, les informations peuvent être lues par une boucle for
simple.
Voici un exemple en utilisant la méthode Collections2.filter
du Google Collections, qui peut filtrer un Collection
par un certain Predicate
. Le résultat filtré (touches qui ont le préfixe souhaité) est donnée à la boucle for
afin d'obtenir la paire de clés et de la valeur:
Properties p = new Properties();
p.put("hello.world", "42");
p.put("hello.earth", "1");
p.put("abc.def", "3");
p.put("def.ghi", "5");
for (Object propKey : Collections2.filter(p.keySet(), new Predicate<Object>() {
public boolean apply(Object o) {
return ((String)o).startsWith("hello.");
}
}))
{
String key = (String) propKey;
System.out.println(key + ", " + p.getProperty(key));
}
Cela peut être un surpuissant petit peu, mais il est une autre approche de la mise en œuvre d'un filtre pour affiner les propriétés avec les touches souhaitées.
Si vous avez les propriétés fichier chargé en tant que chaîne, pourriez-vous utiliser une regex? Ou est-ce que je manque quelque chose? – serg10
Vous ne spécifiez pas comment vous analysez le fichier, utilisez-vous Properties.load() ou l'analysez-vous vous-même? –
vous n'êtes pas l'analyse du fichier de propriétés vous-même êtes-vous? – Kip