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

Java Discussion :

"Classpath" variable java


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2010
    Messages : 94
    Par défaut "Classpath" variable java
    Bonjour,

    Après quelques recherches sur google, je n'ai pas trouvé de réponses, donc je me tourne vers mon forum préféré habituel

    Je pense que je cherche "mal" sur google, d'où le manque de réponse concrète.

    En faite, je travaille sur un projet, et j'aimerai créer dans mon dossier classpath
    un fichier contenant des chemins de fichiers exemple
    cheminFichier.conf
    chemin1 = C://d1//d2/f1.txt

    etc...
    et ensuite dans l'application Java appelé le chemin1 (son contenu).
    Je me rappelle avoir déjà utilisé cette méthode sur un projet, mais je ne me rappelle plus exactement sa mise en place. Et je n'arrive pas à exprimer en deux mots clés mes besoins sur google!

    Pouvez-vous m'aider pour mettre en place cette structure , et est-ce possible ? (cela se trouve sur l'autre projet comme c'était du j2ee et cela tapait sur un serveur est surement différent que ce que je souhaite mettre en place en java "simple" (via eclipse)

    edit: de la même manière j'utilise beaucoup de valeur clé qui sont utilisés dans des treemap et qui sont liées à des fichiers. Or j'utilise ces clés un peu partout dans mon application, dans le classpath, puis je mettre des clé associé à des valeurs afin de changer une seule fois dans l'application la valeur d'une de mes clés sans avoir à les modifier dans toute l'appplication ?


    Merci!

  2. #2
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Pour acceder à un fichier contenu dans ton archive :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getClass().getResource(path)
    a+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2010
    Messages : 94
    Par défaut
    static Object someObject = new Object();
    someObject.getClass().getResource(path)

    (car je l'appelle dans un contexte static)

    Cependant, comment accéder à un champs de ce fichier
    chemin1 = "...."
    chemin2 = "..."

    Merci

  4. #4
    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
    Qu'est-ce que tu entends par "ton dossier classpath"
    Qu'est-ce que tu entend par "appeler le chemin 1 (son contenu)"
    J'ai pas trop compris otn histoire de clé, mais pour éviter uen maintenance inutile, il vaux mieux créer des constante dans une classe ou une interface, voir utiliser des enum quand ça se justifie, et utiliser ces constantes dans le reste du code.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2010
    Messages : 94
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Qu'est-ce que tu entends par "ton dossier classpath"
    Qu'est-ce que tu entend par "appeler le chemin 1 (son contenu)"
    J'ai pas trop compris otn histoire de clé, mais pour éviter uen maintenance inutile, il vaux mieux créer des constante dans une classe ou une interface, voir utiliser des enum quand ça se justifie, et utiliser ces constantes dans le reste du code.
    1)Dossier classpath :
    mon dossier sous eclipse qui se nomme "classpath" ou j'ai mis le fichier de config pour les log4j.

    2) appeler le chemin 1 (son contenu)
    En gros je souhaite créer mon fichier filesDir.conf
    ce fichier contiendra des lignes du type :
    chemin_1 = "D://....."
    chemin_2 = "E://...."
    etc...
    et je souhaite quand j'appelle le fichier filesDir.conf (avec la réponse ci-dessus) que je puisse accéder au champs "chemin_1" et qu'il me renvoie "D://...."

    Pour le système de clé, pareil: key.conf
    clé_1 = "value_1"

    et qu'il me renvoie value_1 quand j'accède clé_1 de key.conf .

    La question étant : comment accéder à cette valeur.

    Par rapport à ton retour:
    De nombreuses classes ont besoin de ces clés, si je créer une interface avec des énum l'ensemble de classes vont devoir implémenter cette interface: cela me dérange au niveau de la programmation: est-ce une pratique "jolie", d'un point vue code ?? => pendant ma formation, on m'a rabâché qu'utiliser des variables globales était "mauvais" synonyme de mauvais programmeur

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Par défaut
    Citation Envoyé par bruno_nono Voir le message
    De nombreuses classes ont besoin de ces clés, si je créer une interface avec des énum l'ensemble de classes vont devoir implémenter cette interface: cela me dérange au niveau de la programmation: est-ce une pratique "jolie", d'un point vue code ?? => pendant ma formation, on m'a rabâché qu'utiliser des variables globales était "mauvais" synonyme de mauvais programmeur
    Non, pas besoin d'implémenter l'interface ou la classe contenant des constantes, il faudra l'importer par contre (pour pouvoir les utiliser avec du "MonInterface.MA_CONSTANTE").
    Les variables globales c'est pas joli, les constantes par contre, je ne vois pas ce qu'il y a de choquant.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2010
    Messages : 94
    Par défaut
    Citation Envoyé par gailuris Voir le message
    Les variables globales c'est pas joli, les constantes par contre, je ne vois pas ce qu'il y a de choquant.
    Quelle est la différence ?
    -> une constance est une variable globale fixe ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public Interface Constante{
      public static String CHEMIN1 = "D://...";
    }
     
     //dans une classe qui a besoin de la valeur de chemin1, par exemple : 
    loadFile(Constante.CHEMIN1);
    Si j'ai bien compris . .

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2010
    Messages : 94
    Par défaut
    Ok merci tchize_

    C'est ce que je recherchais d'après mes souvenirs.

    Merci aux autres membres (cela me fait plusieurs point de vue)

    Reste maintenant à créer le fichier properties, pour cela je pense qu'il y a un tutoriel sur le site !

    Merci :-)

  9. #9
    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
    Citation Envoyé par bruno_nono Voir le message
    Quelle est la différence ?
    -> une constance est une variable globale fixe ?
    quand on oublie pas le "final" dans la ligne, oui

  10. #10
    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
    pour lire facilement un fichier de la forme clé=valeur, utilise la classe Properties.

    On t'as dit que els variable global c'est mal, et c'est vrai, mais on t'as surement aussi dit qu'il faut FACTORISER ton code pour éviter les répétition. En l'occurence, l'utilisation de constance contenant le nom de tes clés est une chose importance.

    On ne v pas faire, par exemple, dans un code, trois fois

    String cheminConfiguration = properties.getProperty("configurationPath");

    mais on fera

    public static final String CONF_KEY = "configurationPath";

    puis 3 fois
    String cheminConfiguration = properties.getProperty(CONF_KEY);

    Ca évite les erreur de faute de frappe. Le compilateur peut vérifier que qu'il n'y a pas de faute à CONF_KEY, il ne peux pas vérifier qu'il n'y a pas de faute à "configurationPath". Il est donc une bonne pratique que tes clés, quand elle doivent être utilisée dans un fichier externes, soient des constantes, ca facilite la maintenance et diminue les risques d'erreur.

  11. #11
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Ce que je comprends de ta demande :
    - Tu veux embarquer un fichier dans ton archive jar et l'utiliser pour stocker des données.
    - Tu veux pouvoir acceder au contenu de ton fichier

    Un petit exemple valant mieux que 1000 mots :
    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
          try
          {
             URL u = getClass().getResource("/res/fich1.txt");
             BufferedReader br = new BufferedReader(new InputStreamReader(u.openStream()));
             String str;
             do
             {
                str = br.readLine();
                System.out.println(str);
             } while(str != null);
          }
          catch (Exception ex)
          {
             ex.printStackTrace();
          }
    Mais comme dit par tchize_, c'est plus simple est plus maintenable de faire un tableau de strings qui contiendrait le contenu de ton fichier.

    a+

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

Discussions similaires

  1. [AC-2002] Quotes dans une variable
    Par Domi2 dans le forum VBA Access
    Réponses: 2
    Dernier message: 23/06/2009, 16h51
  2. Quote dans macro-variable
    Par fafabzh6 dans le forum Macro
    Réponses: 3
    Dernier message: 23/04/2009, 17h39
  3. quotes dans une variable
    Par requiemforadream dans le forum ASP
    Réponses: 3
    Dernier message: 09/05/2005, 09h55

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