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 :

Fichier .ini/paramétrage d'application java par l'user


Sujet :

Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Fichier .ini/paramétrage d'application java par l'user
    Bonjour,
    Je dois paramétrer une application java cliente qui invoquera par RMI une méthode située sur un serveur. Cette application cliente sera placé sur plusieurs site avec des serveurs RMI dont les noms et les ports de com seront différents.
    Il faut donc que le client puisse, sans entrer dans le code, modifier le nom du serveur RMI et le port de com.

    Je pensais utiliser un fichier .ini mais j'ignore tout de l'arborescence des fichiers du client et je ne réaliserait pas l'install moi même.

    Ma question est : comment paramétrer une application java livrée sous forme de jar, à l'aide d'un fichier externe par exemple? Y a t-il de meilleures stratégies pour répondre à ce problème?

    Merci de vos réponses

  2. #2
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    A mon avis connaissant java, la meilleur solution serait un fichier de configuration XML ou .properties, mais un .ini ???

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Dans les deux cas, je n'ai aucune idée de l'endroit où on place le .properties ou le fichier XML. J'ai pu remarquer qu'un fichier dont le chemin n'est pas indiqué était trouvé dans le cas ou il se trouvait à la racine de l'arborescence du projet...

  4. #4
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Sis tu peux soit placer ton fichier dnas l'arborescence des classes java, ou dans un répertroire externe et préciser ce répertroire dans le classpath.

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    J'ai essayé d'utiliser un fichier .properties en utilisant la classe java.util.Properties. C'est une bonne solution.
    Je peux y accéder si le .properties est à la racine du projet mais, lorsque je veux le placer dans un autre répertoire, même en plaçant ce dernier dans le classpath, la classe n'y accède pas...

  6. #6
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par devjav
    J'ai essayé d'utiliser un fichier .properties en utilisant la classe java.util.Properties. C'est une bonne solution.
    Si tu as Java 5.0 peut être que ceci peut t'interresser : Configuration d'une application avec les Annotations

    Par contre je n'ai pas encore eu le temps de faire une documentation propre...

    Citation Envoyé par devjav
    Je peux y accéder si le .properties est à la racine du projet mais, lorsque je veux le placer dans un autre répertoire, même en plaçant ce dernier dans le classpath, la classe n'y accède pas...
    Cela dépend de la manière dont tu accèdes à ton fichier. Détaille ce point pour qu'on puisse t'aider...


    a++

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Ma contrainte est d'utiliser la version 1.4 de java.

    Voici le code de test que j'utilise :

    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
    package test;
     
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.Properties;
     
    public class RMIParamClient {
    	public static String RMISERVERNAME="";  
    	public static int RMIPORT=0;   
    	public Properties p;
     
    	public RMIParamClient(){
    		p=new Properties();
    		try {
    			FileInputStream in = new FileInputStream("rmiparamclient.properties");
    			p.load(in);
    			in.close();
    			RMISERVERNAME = p.getProperty("RMISERVERNAME");
    			RMIPORT = Integer.parseInt(p.getProperty("RMIPORT"));
     
     
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e){
    			e.printStackTrace();
    		}
    	}
     
    	public static void main(String args[]){
    		RMIParamClient g = new RMIParamClient();
    		System.out.println("RMISERVERNAME="+RMISERVERNAME);
    		System.out.println("RMIPORT="+RMIPORT);
    	}
     
    }
    Je voudrais pouvoir placer mon .properties dans un repertoire quelconque sur ma machine. Mais même en ajoutant ce répertoire dans le classpath, je n'y parviens pas.

  8. #8
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Il faut lui spécifier le chemin complet du fichier .properties sinon, il est évident qu'il ne le trouvera pas par exemple :

    C:\\\\Temp\\config.properties ou n'importe quel chemin que tu passeras ensuite dans ton FileInputStream

  9. #9
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Non non, ne jamais spécifier un chemin complet dans une application java. Il faut utiliser la méthode getResourceAsStream de la classe Class.

    Il faut placer le fichier .porperties dans le class path !!!

    Et secundo na pas lire le fichier avec un FileInputStream. Si jamais l'architecture de ton application change tu dois changer tout ces chemins, là tu en as qu'un certes.

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    C'est la ma question en fait:
    Dans le cas ou tu ne maitrise pas l'arborescence de ton client et que tu ne peux pas écrire un chemin en dur, mais que tu dois quand meme utiliser un fichier modifiable par le client de properties, où placer ce fichier pour que cela reste propre?

  11. #11
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Place ton fichier properties à la racine de l'arborescence de tes classes ou le répertroire contenant le .properties dans le class path.

  12. #12
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par thibaut
    Non non, ne jamais spécifier un chemin complet dans une application java. Il faut utiliser la méthode getResourceAsStream de la classe Class.

    Il faut placer le fichier .porperties dans le class path !!!

    Et secundo na pas lire le fichier avec un FileInputStream. Si jamais l'architecture de ton application change tu dois changer tout ces chemins, là tu en as qu'un certes.
    Ben si tu veut pas le mettre dans le jar, tu es bien obligé de mettre le chemin complet, non ?

  13. #13
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par thibaut
    Place ton fichier properties à la racine de l'arborescence de tes classes ou le répertroire contenant le .properties dans le class path.
    Si tu le places dans le CLASSPATH seulement il ne sera pas modifiable (getReource() ne permet pas de modifier le fichier mais seulement de le lire).


    La meilleure solution est d'avoir deux fichiers :
    • Un fichier non-modifiable dans le classpath qui contiendra toutes les valeurs par défaut.
    • Un fichier dans le répertoire HOME de l'utilisateur (obtenu via System.getProperty("user.home")) qui contiendra les valeurs modifié.


    Cela pourrait donner :
    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
    	public Properties loadProperties() throws IOException {
    		Properties properties = new Properties();
     
    		// Chargement depuis un fichier dans le classpath :
    		InputStream stream = ClassLoader.getSystemResourceAsStream("/packageName/default.properties");
    		try {
    			properties.load(stream);
    		} finally {
    			stream.close();
    		}
     
    		// Chargement depuis un fichier utilisateur (s'il existe) :
    		File configFile = new File( System.getProperty("user.home"), ".tonApllication.config" );
    		if (configFile.exists()) {
    			stream = new FileInputStream(configFile);
    			try {
    				properties.load(stream);
    			} finally {
    				stream.close();
    			}
    		}
     
     
    		return properties;
    	}
    Citation Envoyé par wichtounet
    Ben si tu veut pas le mettre dans le jar, tu es bien obligé de mettre le chemin complet, non ?
    Il voulait parler de chemin complet vers des fichiers externes...

    a++

  14. #14
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Merci pour toutes ces réponses.



    Il y a quand même quelque chose qui m'intrigue: j'ai beau placer dans le CLASSPATH le répertoire du fichier properties, lorsqu'il est en dehors du projet, il n'est jamais trouvé... Est-ce normal?

  15. #15
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Pour ce qui est du CLASSPATH, la solution est en effet d'utiliser getSystemResourceAsStream et non getResourceAsStream: en effet, dans le second cas, le fichier n'était pas trouvé tandis qu'avec getSystemResourceAsStream les fichiers sont trouvés avec le CLASSPATH renseigné.

Discussions similaires

  1. Modification du fichier HOSTS via une application JAVA GUI
    Par Christophe39 dans le forum Langage
    Réponses: 1
    Dernier message: 28/04/2015, 09h29
  2. [Compiler] Modification de fichiers .txt dans une application faite par Compiler
    Par maxcentrale dans le forum MATLAB
    Réponses: 9
    Dernier message: 12/03/2014, 17h16
  3. Réponses: 3
    Dernier message: 02/03/2012, 02h16
  4. Ouverture application java par double-clic sur fichier
    Par Lepolochon dans le forum Général Java
    Réponses: 2
    Dernier message: 27/09/2011, 10h53
  5. Integration d'un fichier dll dans une application Java
    Par menzlitsh dans le forum Langage
    Réponses: 3
    Dernier message: 21/09/2006, 15h54

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