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 :

chargement d'un properties en dehors du jar


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 165
    Par défaut chargement d'un properties en dehors du jar
    Bonjour à tous,

    je souhaite externaliser certaines informations dans un fichier properties et les lire depuis mon code java (qui est ensuite empaqueté dans un .jar).
    J'arrive très bien à le faire lorsque le fichier properties est au même niveau que la classe qui lit ce properties :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Properties bdd = new Properties();
    InputStream file = getClass().getResourceAsStream("monFichier.properties");
    bdd.load(file);
    file.close();
    Mon problème, c'est que je souhaite que le fichier properties soit à l'extérieur du jar pour des raisons de souplesse (pouvoir modifier le properties sans avoir à refaire le .jar à chaque fois)

    Quelqu'un sait il comment procéder? Faut il utiliser une autre méthode que getResourceAsStream() ?

    Merci!

  2. #2
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Bonjour,

    Comme expliqué ici, il faut ajouter un '/' au début, sinon le package de la classe utilisée est ajoutée en début du chemin.

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    si le fichier est à lextérieur du classpath, il ne sera pas accessible via le classloader, tu devra donc utiliser un FileInputStream.

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Tu mets ton properties à la racine de ton src, et dans ton code tu le charges de manière relative comme tout fichier de propriétés, c'est d'ailleurs plus facile que ce que t'avais fait. exemple ici

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 165
    Par défaut
    Bonjour,

    Merci pour vos réponses!

    Tu mets ton properties à la racine de ton src, et dans ton code tu le charges de manière relative comme tout fichier de propriétés, c'est d'ailleurs plus facile que ce que t'avais fait. exemple ici
    Je ne souhaite pas que le properties soit à la racine de mon src, sinon il va se retrouver dans le jar à la compilation.

    si le fichier est à lextérieur du classpath, il ne sera pas accessible via le classloader, tu devra donc utiliser un FileInputStream.
    Justement, est il possible d'ajouter le répertoire contenant le jar au classpath? (je ne sais pas si ça a un sens d'ajouter un répertoire dans un classpath...)
    comme ça je peux utiliser getRessourceAsStream. Si ce n'est pas possible, je peux utiliser FileInputStream avec un chemin relatif (genre si ma classe est dans com.package et que mon properties est à l'extérieur du jar, je donne le chemin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new fileInputStream("../../../monFichier.properties")
    (Pour successivement remonter dans le package com, puis la racine du jar, puis le répertoire qui contient le jar?)

    Deaf => merci j'avais lu la FAQ mais ça ne m'a pas aidé.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    le fileinputstream n'a rien de relatif avec ta classe, il est relatif au répertoire courant.

    pour ajouter un répetoire au classpath, il faut le préciser à l'exécution:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -cp repertoire:nomDuJar.jar nom.de.la.classe.Main

    (le : est à remplacer ar ; sous windows)

    optionellement, tu peux aussi l'ajouter au MANIFEST.MF du jar, mais là j'avoue, je n'ai jamais essayé d'y mettre autre chose que des jar Dans ce dernier cas tu pourral lancer ton application avec un simple java -jar.

  7. #7
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Justement, est il possible d'ajouter le répertoire contenant le jar au classpath? (je ne sais pas si ça a un sens d'ajouter un répertoire dans un classpath...)
    Oui, tu peux et cela a un sens, le même que pour les jars.

    Si ton fichier se retrouvera à terme dans un jar, c'est bien par le getResource que tu dois passer et non par le FileInputStream. Tu dois seulement t'assurer que le jar est bien dans le classpath.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 165
    Par défaut
    tchize_ > ok pour le fileInputStream, mais qu'est ce que le répertoire courant au moment où le code s'exécute? (le repertoire de lancement du jar?, celui de java? du home du user?) Et à partir de ce répertoire courant donc, je peux aller chercher en relatif mon fichier?

    Sinon plus simple peut être, j'ajoute le répertoire contenant le fichier au classpath et je vais le chercher avec un simple getRessourceAsStream?

    J'essaie les 2!

    Deaf > d'accord, mais je veux vraiment qu'il soit en dehors du jar, pour la raison évoqué dans mon premier post

  9. #9
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Citation Envoyé par eatherquake Voir le message
    Deaf > d'accord, mais je veux vraiment qu'il soit en dehors du jar, pour la raison évoqué dans mon premier post
    Au temps pour moi, j'avais mal lu ta réponse

  10. #10
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par eatherquake Voir le message
    tchize_ > ok pour le fileInputStream, mais qu'est ce que le répertoire courant au moment où le code s'exécute? (le repertoire de lancement du jar?, celui de java? du home du user?) Et à partir de ce répertoire courant donc, je peux aller chercher en relatif mon fichier?
    Cela dépend de la manière dont tu lances l'application. En fait le répertoire courant est déterminé par l'application qui lance ton application (la ligne de commande, le shell système, etc.) et on ne peut pas vraiment garantir qu'il sera toujours le même.



    Après s'il s'agit d'un simple fichier de configuration, le plus simple serait de le mettre dans le répertoire de l'utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File configFile = new File(System.getProperty("user.home"), ".myapps-config.css");


    @DevServlet : Attention le code que tu donnes en lien est incorrect (pas de fermeture des flux - j'ai répondu sur son billet).

    a++

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

Discussions similaires

  1. problème de chargement de fichier properties.
    Par lennelei dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 23/02/2009, 17h35
  2. ajout fichiers properties au lancement du jar
    Par Katachana dans le forum Langage
    Réponses: 3
    Dernier message: 19/02/2009, 17h35
  3. Réponses: 1
    Dernier message: 30/03/2007, 17h40
  4. Réponses: 1
    Dernier message: 01/12/2006, 10h54
  5. appeler un properties en dehors du jar
    Par keguira dans le forum Langage
    Réponses: 13
    Dernier message: 04/07/2006, 16h39

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