Visiteur non identifié. Spherick
« Les cons, ça ose tout, c’est même à ça qu’on les reconnaît. »Michel Audiard, Les Tontons flingueurs, 1963
Jan
Fév
Mar
Avr
Mai
Jui
Jui
Aou
Sep
Oct
Nov
Déc
Accueil > Blog Eric > Hobbies > Informatique > Fichier properties en Java

Public  Fichier properties en Java

Petit exemple simple

lundi 16 novembre 2009, lu 5173 fois

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 ;
}
Vous pouvez noter cet article, lu 5173 fois
3 votes


Qui êtes-vous ?
Votre message

Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.