web-dev-qa-db-fra.com

Plusieurs valeurs dans Java.util.Properties

Il semble que Java.util.Properties suppose une valeur par clé de propriété. C'est,

foo=1
foo=2

n'est pas prévu,

Existe-t-il une classe pour ce type de feuille de propriétés à valeurs multiples, qui fournit également la méthode de chargement?

36
ClueMinus

Essayer:

foo=1,2

String[] foos = properties.getProperty("foo").split(",");
63
Nick Holt

La fonction Java.util.Properties est assez limitée. Si vous voulez une liste de support, vous pouvez essayer PropertyConfiguration d'Apache Commons Configuration,

http://commons.Apache.org/configuration/userguide/howto_properties.html#Using_PropertiesConfiguration

Avec celui-ci, vous pouvez définir tous les délimiteurs de votre liste et la division se fera automatiquement pour vous. Vous pouvez également faire d'autres choses fantaisistes dans le fichier de propriétés. Par exemple,

foo=item1, item2
bar=${foo}, item3
number=123

Vous pouvez le récupérer comme ça,

Configuration config = new PropertiesConfiguration("your.properties");
String[] items = config.getStringArray("bar"); // return {"item1", "item2", "item3"}
int number = config.getInt("number", 456); // 456 is default value
20
ZZ Coder

Réponse correcte par Nick.

Ou, si vous pouvez attribuer un sous-nom différent à chaque valeur, vos propriétés peuvent être:

    my.properties

    foo.title=Foo
    foo.description=This a big fat foo.
4
KLE

Cela ne fournira pas la méthode de chargement mais un endroit pour les stocker, vous pouvez utiliser un multivaluemap commun à Apache:

"Une carte MultiValue décore une autre carte, ce qui lui permet d’avoir plus d’une valeur pour une clé."

C'est souvent une exigence pour les paramètres de requête http ...

http://commons.Apache.org/collections/apidocs/org/Apache/commons/collections/map/MultiValueMap.html

0
Pablojim

Si vous avez un exemple plus complexe, vous pouvez utiliser les éléments suivants:

# pairs of properties
source1=foo
target1=bar
source2=anotherFoo
target2=regardingBar
source3= ...

Dans votre code, vous devrez chercher:

Map<String, String> myMap = new HashMap<>();
for (int i=1; i<max; i++) {
  String source = properties.get("source" + i);
  String target = properties.get("target" + i);
  if (source == null || target == null) {
    break;
  }
  myMap.put(source, target);
}

Inconvénient: mettre à jour le fichier de propriétés. Si vous supprimez les valeurs * 2, toutes les valeurs suivantes ne seront pas ajoutées. Pour améliorer, vous voudrez peut-être remplacer la pause par un continue et vous en tenir au maximum des paires autorisées.

0
Clerenz