61 votes

Comment référencer une autre propriété dans java.util.Properties ?

Le fichier de propriétés Java peut-il faire référence à un autre fichier de propriétés ?

## define a default directory for Input files  
dir.default=/home/data/in/

dir.proj1=${dir.default}p1
dir.proj2=${dir.default}p2
dir.proj3=${dir.default}p3

Est-ce possible ?

2 votes

Vous pouvez utiliser Configuration d'Apache Commons .

0 votes

S'agit-il d'une question sur la référence à d'autres propriétés dans le même fichier ou sur la référence à des propriétés dans d'autres fichiers ?

0 votes

Mon bitbucket.org/djarvis/yamlp fonctionne sur les fichiers YAML. Un peu de travail serait nécessaire pour que le code plus générique afin qu'il fonctionne avec les fichiers de propriétés et les ResourceBundles.

54voto

OscarRyz Points 82553

Chris Mair's XPropriétés peut être un bon point de départ.

Vous pouvez substituer une constante n'importe où dans la valeur de la propriété, et même avoir plus d'une constante dans une valeur, comme dans l'exemple suivant :

CONST_1 = shoes and ships
CONST_2 = sealing wax
SomeValue = {CONST_1} and {CONST_2} 

Dans cet exemple, la propriété "SomeValue" est évaluée à "shoes and ships and sealing wax".

2 votes

@ianaz Veuillez noter dans le lien que vous devez utiliser la sous-classe XProperties au lieu de Properties. Cela peut être la raison pour laquelle vous ne voyez rien.

12voto

Paul Points 101

Eproperties est le projet open source qui fournit une substitution de variable ainsi que quelques autres fonctionnalités - bien que la substitution soit sans doute la plus utile. C'est une sous-classe de java.util.Properties, et elle peut être utilisée par toute autre classe qui peut prendre des informations de configuration comme propriétés.

1 votes

Un seul jar à installer et à utiliser, si vous avez appache common logging dans votre classpath. Un aperçu de la syntaxe aquí .

8voto

Les fichiers de propriétés standard ne sont que des paires clé-valeur. Au format texte, Properties sépare simplement la clé de la valeur et fait quelques choses simples comme autoriser les caractères échappés. Vous pourriez être en mesure de définir des entités dans la syntaxe XML verbeuse.

Si vous voulez votre propre syntaxe de substitution, vous pouvez alors manipuler une valeur retournée comme vous le feriez avec n'importe quelle autre chaîne. Alternativement, vous pouvez écrire votre propre version de Properties ou effectuer la substitution lors de la génération du fichier.

7voto

highlycaffeinated Points 11645

La classe java.util.Properties ne le fera pas pour vous. Il ne serait pas trop difficile de sous-classer Properties, de surcharger la méthode load() et de faire la substitution vous-même.

7voto

NightWolf Points 2344

La librairie Commons Config peut également le faire. http://commons.apache.org/configuration/userguide/overview.html#Using_Configuration

Toutefois, comme nous l'avons déjà souligné, jetez un coup d'œil à la bibliothèque EProperties ; http://code.google.com/p/eproperties/

Il prend en charge un certain nombre de fonctionnalités intéressantes (telles que la substitution, l'imbrication, les listes), y compris l'inclusion, étend les propriétés Java et est un peu plus léger que Commons Config (qui vous permet également d'inclure des propriétés à l'aide de la syntaxe include).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X