04/03/2009
Un fichier properties est un fichier nommé xxxx.properties, de format texte tout simple, et contenant des listes de type
# un commentaire
nom=valeur
Toutes les valeurs sont de type String.
L’utilisation de ces fichiers est simple, les méthodes ci-dessous permettent de demander la valeur associée à un nom.
Remarque : je prétends pas que ce code est utilisable industriellement tel quel, il n’est qu’un exemple simple...
import java.util.Properties;
import java.io.FileInputStream;
[...]
private Properties _configProjet = null ;
[...]
// Charge le fichier properties
private Properties chargerFichierProprietes(String nomFichier) throws FileNotFoundException, IOException {
Properties props = new Properties();
props.load(new FileInputStream(nomFichier));
return props;
}
// Recherche la valeur d'un paramètre dans le fichier properties du projet
// nomFichier est évidemment le nom du fichier .properties à traiter
// propriete est le nom de la propriété cherchée
public String valeurPropriete(String nomFichier, String propriete) {
if (_configProjet == null) {
try {
_configProjet = chargerFichierProprietes(nomFichier);
} catch (FileNotFoundException e) {
System.out.println("fichier " + nomFichier + " non trouvé");
return null;
} catch (IOException e) {
System.out.println("Erreur ouverture fichier " + nomFichier);
e.printStackTrace();
return null;
}
}
return (String) _configProjet.get(propriete);
}
— -
16/11/2009
L’un des problèmes courants est l’emplacement du fichier properties. En effet, dans le code ci-dessus, la méthode chargerFichierProprietes attend le nom du fichier properties à charger. Evidemment, vu le code proposé, il faut passer le nom complet, avec le chemin.
Dans un contexte professionnel, il n’est pas possible de laisser cela en l’état. En effet, le répertoire contenant le fichier properties va varier d’un client à l’autre. Or, pour le paramétrer, il faudrait le mettre dans un fichier properties : on se mord la queue !
Il faut donc trouver une façon d’indiquer un fichier sans pouvoir indiquer le chemin absolu. Ceci est possible en utilisant les mécanismes du classpath : Java est capable d’aller chercher une ressource "quelque part" dans les dossiers indiqués dans le classpath.
Problème : il peut y avoir plusieurs fichiers trouvés. Par exemple, si on cherche le fichier "toto.properties", on peut le trouver dans 3 des répertoires indiqués par le classpath. Il va donc falloir en choisir un, sans jamais être sûr d’utiliser le bon.
Le code ci-dessous recherche tous les fichiers correspondant au nom indiqué dans tous les répertoires du classpath, et il utilise le 1er trouvé.
private static Properties chargerFichierProprietes(String fichier) throws FileNotFoundException, IOException {
// Prend le classLoader du thread courant
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
// Fichier de properties
Properties properties = new Properties();
// Enumération contenant tous les fichiers dont le nom
// matche avec le nom de fichier passé en paramètre
// dans tous les dossiers pointés par le classpath
Enumeration<URL> enumFichiers = classLoader.getResources(fichier);
// Utilise la première occurence du fichier trouvée
// dans les dossiers du classpath
URL fichierTrouve = null;
if (enumFichiers != null) {
if (enumFichiers.hasMoreElements()) {
fichierTrouve = (URL) enumFichiers.nextElement();
System.out.println("fichier properties utilisé : " + fichierTrouve.toString());
properties.load(fichierTrouve.openStream());
}
}
return properties ;
}
le 3 septembre 2017 par Eric
le 1er septembre 2017 par Bibi
le 24 juin 2017 par Eric
le 29 mai 2017 par roland