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 :

[Fichiers de configs] Localiser un fichier


Sujet :

Java

  1. #1
    Invité
    Invité(e)
    Par défaut [Fichiers de configs] Localiser un fichier
    Bonjour,

    Pour une application j'ai 4 sous projets (Web,Metier,EIS et Librairie)

    Je voudrais centraliser le paramètres dans une seul endroit.
    Actuellement j'ai une classe 'ConfigManager' qui se contente de chercher et lire des fichiers '.properties' situés dans System.getProperty("user.dir")

    Mes fichiers sont centralisés mais l'endroit n'est pas vraiment bon..
    1° Existe t'il déja une librairie pour ce genre de chose (quelque soit le format du/des fichiers) ?
    2° Si pas de librairie, que me conseillez-vous ?

  2. #2
    Membre chevronné
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Par défaut
    Si j'ai bien compris, tu cherches le chemin absolu a tes fichiers.
    J'ai eu le même problème et j'ai trouver "Comment trouver le répertoire contenant le jar où est ma classe ?"
    http://java.developpez.com/faq/java/...YSTEME_dir_jar
    En le modifiant légèrement ça marche, (Par défaut il ne gère pas les packages).

  3. #3
    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 Blaise1
    1° Existe t'il déja une librairie pour ce genre de chose (quelque soit le format du/des fichiers) ?
    Tu peux utiliser l'API de Preferences, mais le problème c'est que tu n'as pas vraiment la main sur le stockage des données (base de registre sous Windows, fichiers sous Linux...) bien qu'il me semble qu'il soit possible d'utiliser ta propre implémentation...


    Citation Envoyé par Blaise1
    2° Si pas de librairie, que me conseillez-vous ?
    Ta solution n'est pas si mal, sauf que je n'utiliserais pas "user.dir" puisqu'il correspond au répertoire depuis lequel le programme est lancé... et qu'il peut donc varier d'une exécution à l'autre ou ne pas être forcément celui que tu souhaites (par exemple dans le cas d'un raccourci sur le bureau).

    Donc je pense qu'il serait plus simple d'utiliser "user.home" à la place. Ce dernier te renvoi le dossier personnel de l'utilisateur (généralement /home/<login> sous Unix/Linux et C:\Documents and Settings\<login> sous Windows), par exemple en créant un sous répertoire dont le nom commence pas un point (ce qui permet de le rendre caché sous Unix/Linux - sous Windows ce répertoire n'est pas vraiment "visible" donc ce n'est pas génant).

    L'avantage, c'est que tu es quasi-sûr que l'application aura les droits d'écrire dans ce répertoire, et que ce sera le même à chaque fois que l'utilisateur lance le programme (quel que soit sa manière de le lancer).

    a++

  4. #4
    Invité
    Invité(e)
    Par défaut
    adiGuba
    Oui, il y à Preferences ou Properties mais c'est plus adapté à des applications clientes qu'a une application Web...

    Si j'utilise Préférences ou Properties avec user.home j'aurais "une config" pour chaque utilisateur de mon serveur...

    Il me semble avoir lu quelque pars que Hibernate localise son fichier de configuration quelque soit son emplacement...


    dahtah
    Merci pour l'info, ça me semble correct.
    En supposant que mon application Web et les sous-projets se trouvent dans
    '/var/www/java/monapp/*.jsp,WEB-INF/lib/*' j'aurais juste à déposer mes fichiers properties dans '/var/www/java/monapp/' et mon ConfigManager irais les récupèrer.

    Merci beaucoup pour l'info.

  5. #5
    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 Blaise1
    adiGuba
    Oui, il y à Preferences ou Properties mais c'est plus adapté à des applications clientes qu'a une application Web...
    Je n'avais pas compris que c'était une appli Web...

    Deux solutions alors :
    • Tu places tes fichiers de config dans ta web-apps et tu les charges au démarrage (si tes 4 sous projets tournent sous un serveur J2EE).
    • Tu places tes fichiers de conf dans un répertoire par défaut, ou défini par une variable d'environnement ou autre propriété.


    a++

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par adiGuba
    J
    • Tu places tes fichiers de config dans ta web-apps et tu les charges au démarrage (si tes 4 sous projets tournent sous un serveur J2EE).
    • Tu places tes fichiers de conf dans un répertoire par défaut, ou défini par une variable d'environnement ou autre propriété.
    J'utilise Tomcat. Mais la deuxième solution me plaît assez.
    Je vais d'abord tenter la solution de 'dahtah' si ça ne ma conviens toujours pas je vais utiliser une variable d'environnement.

    Merci

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Jusqu'a présent la solution de dahtah fonctionnait. Mais nous sommes passés sur un serveur Linux (RedHat) mais la solution ne fonctionne plus.

    Nous avons une NullPointerExcepetion sur la ligen : path = URLDecoder.decode(url.toString(), "UTF-8");
    En faisant quelques tests on se rende compte que getResource("/be\\ghd\\metier\\config\\ConfigManager.class"); renvoie null.

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    // FIXME : Utiliser le nom de la classe pour créer l'url (ligne 1 et 2)
    	private static File getBasePath() {
     
     
    		String path;
     
    		path = ConfigManager.class.getName() + ".class";		
    		URL url = ConfigManager.class.
    	    	getResource("/be\\ghd\\metier\\config\\ConfigManager.class");
    	    try {
    			path = URLDecoder.decode(url.toString(), "UTF-8");
    		} catch (UnsupportedEncodingException e) {
    			e.printStackTrace();
    		}
     
    	    // suppression de  la classe ou du jar du path de l'url
    	    int index = path.lastIndexOf("/");
    	    path = path.substring(0, index);
     
    	    if (path.startsWith("jar:file:"))
    	    {
    	      // suppression de jar:file: de l'url d'un jar
    	      // ainsi que du path de la classe dans le jar
    	      index = path.indexOf("!");
    	      path = path.substring(9, index);
    	    }
    	    else
    	    {
    	      // suppresion du file: de l'url si c'est une classe en dehors d'un jar
    	      // et suppression du path du package si il est présent.
    	      path = path.substring(5, path.length());
    	      Package pack = ConfigManager.class.getPackage();
    	      if (null != pack)
    	      {
    	        String packPath = pack.toString().replace('.', '/');
    	        if (path.endsWith(packPath))
    	        {
    	          path = path.substring(0, (path.length() - packPath.length()));
    	        }
    	      }
    	    }
     
    	    return new File(path);
    	}
    Quelqu'un aurait une idée sur la cause de cette Exception ?

    Merci

  8. #8
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URL url = ConfigManager.class.getResource("/be\\ghd\\metier\\config\\ConfigManager.class");
    Le mélange de '/' et de '\' est bizarre... Sous Linux, essaye de charger tous tes chemins aves de '/' uniquement et vérifie les droits d'accès aux répertoires/fichiers (chmod et chown) par rapport à l'utilisateur qui exécute le programme
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  9. #9
    Invité
    Invité(e)
    Par défaut
    Voilà (pour le moment) cette solution semble fonctionner.

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    public class ConfigManager {
     
       ...
     
       String base = ConfigManager.class.getCanonicalName();
       base = base.replace('.', '/') + ".class";
       base = base.substring(0, base.lastIndexOf('/')+1);
     
       URL url = ConfigManager.class.getClassLoader().getResource(base);
     
       String urlStr = url.toString();
       urlStr = urlStr.substring(0, (urlStr.length()-base.length()));
     
       File path = null;
       try {
          path = new File( new URL(urlStr).toURI() );
       } catch (MalformedURLException e) {
          e.printStackTrace();
       } catch (URISyntaxException e) {
          e.printStackTrace();
       }
     
       System.out.println(ConfigManager.class + " PATH : '" + path + "'.");
     
    ...

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

Discussions similaires

  1. Réponses: 19
    Dernier message: 31/10/2005, 15h04
  2. [Properties] Mise a jour de variable de config dans un fichier
    Par tripop dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 03/02/2005, 11h28
  3. [C#] Section appSettings du fichier Web.config
    Par pbo dans le forum ASP.NET
    Réponses: 2
    Dernier message: 01/02/2005, 10h12
  4. [struts] utilisation de plusieurs fichiers de config
    Par Boosters dans le forum Struts 1
    Réponses: 4
    Dernier message: 25/03/2004, 10h04
  5. fichier de config: refuse tcpip_socket=true.
    Par phil25 dans le forum Installation
    Réponses: 1
    Dernier message: 04/01/2004, 15h55

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