IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

[TOMCAT] Comment gérer la l'emplacement d'un fichier .properties ?


Sujet :

Entrée/Sortie Java

  1. #1
    Membre confirmé
    Profil pro
    gnome
    Inscrit en
    Octobre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : El Salvador

    Informations professionnelles :
    Activité : gnome

    Informations forums :
    Inscription : Octobre 2004
    Messages : 142
    Par défaut [TOMCAT] Comment gérer la l'emplacement d'un fichier .properties ?
    Bonjour,

    Dans les classes de mon projet web (c'est du Struts 2 mais peu importe les détails), j'essaye en vain d'exploiter correctement un fichier de propriétés (contenant les params de connexion à une bd) :

    Le code pour générer le fichier .properties, pour l'éditer, puis le lire, fonctionne très bien... mais je n'arrive pas à gérer correctement l'emplacement de ce fichier.

    Lors de la création (je n'ai pas besoin de créer ce fichier via le code, mais ça m'a permis de voir à quel endroit il était généré), celui-ci est toujours créé dans le répertoire où est installé Eclipse (/opt/eclipse).

    Pour la lecture, si le fichier est dans ce répertoire, ça fonctionne. Mais si j'essaye de le déplacer avant de l'ouvrir, dans le dossier de la web application elle-même par exemple, le fichier n'est plus trouvé.

    Sour Eclipse par exemple, j'ai tenté de le mettre dans le répertoire des sources. Ainsi, à l'exécution, il est automatiquement recopié dans le répertoire des classes compilées. Mais ce fichier n'est ensuite jamais trouvé par le programme.

    Pourtant, d'après ce que j'ai lu, le répertoire des classes compilées fait automatiquement partie du classpath, et le fichier devrait donc être trouvé.

    Pouvez-vous m'éclairer ?
    Dois-je configurer le classpath de mon projet ? si oui comment faire ?

    (je suis sous Eclipse 3.4 sous ubuntu)

  2. #2
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Si ton fichier properties est sous WEB-INF/classes, essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String filename="tonFichier.properties" ;
    ClassLoader classLoader = this.getClass().getClassLoader();
    File file = new File(classLoader.getResource(filename).getFile());

  3. #3
    Membre confirmé
    Profil pro
    gnome
    Inscrit en
    Octobre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : El Salvador

    Informations professionnelles :
    Activité : gnome

    Informations forums :
    Inscription : Octobre 2004
    Messages : 142
    Par défaut
    Mais... mais.... mais ça marche !!!!

    ouff ! merci beaucoup.

    Par contre, je ne comprends pas la chose suivante. Ton code fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String filename="config.properties";
    ClassLoader classLoader = this.getClass().getClassLoader();
    File file = new File(classLoader.getResource(filename).getFile());
    System.out.println("chemin: "+file.getAbsolutePath());
    Par contre les deux solutions suivantes ne fonctionnent pas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ResourceBundle rb = ResourceBundle.getBundle("config.properties");
    String password = rb.getString("db_password");
    System.out.println("pass: "+password);
    Erreur générée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    java.util.MissingResourceException: Can't find bundle for base name config.properties, locale fr_FR
    	at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1508)
    	at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1262)
    	at java.util.ResourceBundle.getBundle(ResourceBundle.java:717)
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Properties settings2 = new Properties();
    FileInputStream in;
    try {
    	in = new FileInputStream("config.properties");
    	settings2.load(in);
    	System.out.println("sortie: "+settings2.getProperty("db_password"));
    } catch (FileNotFoundException e) {
    	e.printStackTrace();
    } catch (IOException e) {
    	e.printStackTrace();
    }
    Erreur générée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    java.io.FileNotFoundException: config.properties (No such file or directory)
    	at java.io.FileInputStream.open(Native Method)
    	at java.io.FileInputStream.<init>(FileInputStream.java:106)
    	at java.io.FileInputStream.<init>(FileInputStream.java:66)
    Alors que le fichier est au même endroit : /WEB-INF/classes/config.properties

    Pourquoi est-il trouvé dans le premier cas, et pas dans les deux autres ?

    un vrai mystère pour moi.

  4. #4
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Pour que cela fonctionne avec ResourceBundle, il faut avoir défini le fichier properties dans la balise message-resources du struts-config.xml (en Struts 1 parce qu'en Struts 2, je ne sais pas si le fonctionnement est le même).

    Sinon, pour que ça fonctionne avec le FileInputStream, il suffit de passer en paramètre du constructeur l'objet de type File au lieu du String contenant le nom du fichier properties :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    String filename="config.properties";
    ClassLoader classLoader = this.getClass().getClassLoader();
    File file = new File(classLoader.getResource(filename).getFile());
     
    Properties settings2 = new Properties();
    FileInputStream in;
    try {
    	in = new FileInputStream(file);
    	settings2.load(in);
    	System.out.println("sortie: "+settings2.getProperty("db_password"));
    } catch (FileNotFoundException e) {
    	e.printStackTrace();
    } catch (IOException e) {
    	e.printStackTrace();
    }

  5. #5
    Membre confirmé
    Profil pro
    gnome
    Inscrit en
    Octobre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : El Salvador

    Informations professionnelles :
    Activité : gnome

    Informations forums :
    Inscription : Octobre 2004
    Messages : 142
    Par défaut
    Merci chef !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/02/2012, 12h23
  2. Réponses: 3
    Dernier message: 08/10/2010, 11h49
  3. Emplacement d'un fichier properties + packaging
    Par zorglubpok dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 15/11/2009, 18h38
  4. Comment mettre à l'extérieur du .jar un fichier properties ?
    Par KnucklesTheEchidna dans le forum Applets
    Réponses: 5
    Dernier message: 18/01/2008, 18h40
  5. Comment gérer les espaces blancs?
    Par Lambo dans le forum XML/XSL et SOAP
    Réponses: 10
    Dernier message: 16/05/2003, 09h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo