2010-02-01 6 views
6

Je veux avoir plusieurs clés (> 1) pour une seule valeur dans un fichier de propriétés dans mon application Java. Une façon simple de faire la définition de chaque clé dans une ligne distincte dans le fichier de propriétés et la même valeur pour toutes ces clés. Cette approche augmente la maintenabilité du fichier de propriétés. L'autre façon (que je pense pourrait être une manière intelligente) est de définir des clés séparées par des virgules avec la valeur en une seule ligne. par exemple.Propriétés dans Java - pouvons-nous avoir des clés séparées par des virgules avec une seule valeur?

key1,key2,key3=value 

Java.util.properties ne prend pas en charge cette fonction. Est-ce que quelqu'un a déjà fait quelque chose de simillar? J'ai fait google mais je n'ai rien trouvé.

--manish

Répondre

2

Depuis java.util.Properties étend java.util.Hashtable, vous pouvez utiliser Properties pour charger les données, puis post-traiter les données.

L'avantage d'utiliser java.util.Properties pour charger les données au lieu de rouler votre propre est que la syntaxe des propriétés est en fait fairly robust, supportant déjà de nombreuses fonctionnalités utiles que vous pourriez finir par avoir à réimplémenter (telles que les valeurs de séparation à travers plusieurs lignes, évasions, etc.).

4

L'un des avantages des fichiers de propriétés est qu'ils sont simples. Pas de syntaxe complexe à apprendre, et ils sont faciles à regarder.

Vous voulez savoir ce que la valeur du logement foo est? Scannez rapidement la colonne de gauche jusqu'à ce que vous voyez "foo".

Personnellement, je trouverais cela confus si je voyais un fichier de propriétés comme ça.

Si c'est ce que vous voulez vraiment, il devrait être simple à implémenter. Un premier coup rapide pourrait ressembler à ceci:

  • Ouvrir le fichier
  • Pour chaque ligne:
    • trim() espaces blancs
    • Si la ligne est vide ou commence par un #, passez
    • Séparer sur "=" (avec limite définie sur 2), vous laissant la touche et la valeur
    • Clé partagée sur ","
    • Pour chaque touche, trim() et l'ajouter à la carte, ainsi que le trim() « d valeur

Voilà.

+0

+1 pour le conseiller « rester simple ». – helios

+0

N'oubliez pas que le fichier de propriétés suit le principe suivant: Clé = Valeur ou Valeur = Clé ou les deux (touche = touche ou valeur = valeur) . Le signe "=" sépare les 2 champs. Apache Struts utilise cette fonctionnalité de manière extensive quand ils ont introduit LookupDispatchAction.Juste pensé à ajouter ma valeur 2cent :-) –

+0

@Gentleman: Peut-être Struts a une sous-classe de propriétés spéciales, mais Java 'Properties' régulières sont juste clé = valeur. –

5

Je ne suis pas au courant d'une solution existante, mais il devrait être assez simple à mettre en œuvre:

String key = "key1,key2,key3", val = "value"; 
Map<String, String> map = new HashMap<String, String>(); 
for(String k : key.split(",")) map.put(k, val); 
System.out.println(map); 
Questions connexes