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

Langage Java Discussion :

accéder fichier properties


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 200
    Par défaut accéder fichier properties
    Bonjour !

    Mon problème a l'air simple mais je n'arrive pas à trouver de solution (correcte).
    Je suis dans un projet java web, une portlet pour être plus précis, mais je poste sur cette partie du forum car ça correspond mieux, je pense, à mon problème précis.

    J'essai tout simplement d'accéder à un fichier properties de cette manière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Properties prop = new Properties();
    FileInputStream in = new FileInputStream(filePath);
    prop.load(in);
    in.close();
    prop.getProperty(propertyName);
    Et en fait je n'arrive pas à trouver une méthode qui me permettrait de retrouver le chemin du fichier properties pour pouvoir l'attribuer à 'filePath'.

    Quand je me sers des méthode getCanonicalPath, getPath, getClass().getClassloader, etc.
    Ca me retourne le chemin d'Eclipse...
    Le mieux que j'ai réussi à avoir, c'est de cette manière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     this.getClass().getResource("ResultsServicesTestsController.class")+"";
    Où j'ai le chemin absolu jusqu'à la classe, donc après il faudrait que je récupère la partie de la chaîne qui m'intéresse mais bon, n'y a t-il pas une méthode toute faite pour récupérer le chemin jusqu'au dossier de ma portlet ?

    En fait je récupère ça :
    "file:/B:/Portail_TMA/liferay-portal-6.0.3/tomcat-6.0.26/webapps/LastResultsTestsUnitServices-portlet/WEB-INF/classes/com/.../liferay/lastresultstestsunitservices/controller/ResultsServicesTestsController.class"

    Et j'aimerai n'avoir que ça :
    "B:/Portail_TMA/liferay-portal-6.0.3/tomcat-6.0.26/webapps/LastResultsTestsUnitServices-portlet/"

    Donc pour le moment à part travailler sur ma chaîne, je vois trop quoi faire d'autre...

    Des suggestions ?

  2. #2
    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,


    Où se situe ton fichier properties exactement ????

    a++

    PS : Et il manque try/finally pour la libération du flux !?!?

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 200
    Par défaut
    Bonjour,

    Merci de ta réponse.

    Désolé, je pensais que c'était clair, dans mon post

    Mon fichier properties se situe dans "B:/Portail_TMA/liferay-portal-6.0.3/tomcat-6.0.26/webapps/LastResultsTestsUnitServices-portlet/"

    Et j'arrive à récupérer "file:/B:/Portail_TMA/liferay-portal-6.0.3/tomcat-6.0.26/webapps/LastResultsTestsUnitServices-portlet/WEB-INF/classes/com/.../liferay/lastresultstestsunitservices/controller/ResultsServicesTestsController.class"

    Donc pour le moment je fais un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String current = this.getClass().getResource(this.getClass().getName())+"";
     
    if (current.startsWith("file:/"))
           current = current.replace("file:/", "");
     
    return current.substring(1, current.indexOf("WEB-INF"));
    PS: oui merci pour le try/finally, je l'ai fait dans mon code, je n'ai posté que les lignes qui entrent en lignes de compte !

  4. #4
    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
    Donc il se trouve à la racine de ta webapps.

    Dans ce cas il faut utiliser la méthode getRealPath() de ton PortletContext. Cela te permettra de manipuler des chemins relatifs à ton projet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String path = context.getRealPath("/fichier.properties");
    Note : attention aux fichiers de configurations directement à la racine ils pourraient être lu depuis l'extérieur. Il serait préférable de le déplacer dans WEB-INF !!!





    Sinon une autre solution si tu veux utiliser getResource(), c'est de déplacer le fichier properties dans une de tes packages afin d'y accéder directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InputStream in = getClass().getResourceAsStream("/package/fichier.properties");

    a++

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 200
    Par défaut
    Pour getRealPath(), je préfère éviter d'utiliser le context de ma portlet, j'ai déjà essayé et ai réussi, mais ça me gênait un peu pour l'architecture de mon projet, et pour d'autres soucis, enfin je ne vais pas m'étaler, mais je vais essayer la seconde méthode. J'avais déjà essayé mais je m'y étais visiblement mal pris !

    Par contre peut-tu m'expliquer comment les fichiers properties peuvent être lu de l'extérieur ? Et en quoi le fait de le mettre dans WEB-INF "protège" mieux ?

  6. #6
    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
    Citation Envoyé par Air P-E Voir le message
    Pour getRealPath(), je préfère éviter d'utiliser le context de ma portlet, j'ai déjà essayé et ai réussi, mais ça me gênait un peu pour l'architecture de mon projet, et pour d'autres soucis, enfin je ne vais pas m'étaler,
    Si tu ne veux pas te trimballer le context, tu peux simplement utiliser getRealPath("/") pour récupérer le répertoire de base de ta webapps, et générer tes chemins à partir de là...

    Citation Envoyé par Air P-E Voir le message
    Par contre peut-tu m'expliquer comment les fichiers properties peuvent être lu de l'extérieur ?
    Je n'ai jamais fait de portlet, mais si ca tourne dans une webapps les fichiers peuvent être accédé directement en HTTP du moment que l'on connait son URL...

    Ok il faut connaitre l'URL mais ce n'est pas forcément une information top-secret. Par contre si ton fichier de configuration comporte des informations critiques (mot de passe, etc.) alors là ca peut devenir dangereux !

    Citation Envoyé par Air P-E Voir le message
    Et en quoi le fait de le mettre dans WEB-INF "protège" mieux ?
    L'accès au répertoire WEB-INF par HTTP est bloqué (cela génère une erreur 404).

    a++

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

Discussions similaires

  1. [Helios] [Débutant] Accéder à un fichier properties
    Par wsb31 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 01/05/2011, 02h06
  2. Accéder au fichier .properties
    Par drumtof dans le forum Langage
    Réponses: 11
    Dernier message: 05/06/2009, 10h57
  3. [ResourceBundle] accéder à un fichier properties
    Par sylsau dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 04/12/2007, 22h10
  4. [STRUTS] fichier properties indépendant
    Par meufeu dans le forum Struts 1
    Réponses: 5
    Dernier message: 28/07/2004, 16h10
  5. [struts] utiliser plusieurs fichiers properties
    Par jaimepasteevy dans le forum Struts 1
    Réponses: 7
    Dernier message: 03/10/2003, 17h02

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