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

Format d'échange (XML, JSON...) Java Discussion :

Problème un fichier XML


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 62
    Points : 57
    Points
    57
    Par défaut Problème un fichier XML
    Bonsoir à tous,

    Je suis sur un projet dans lequel je suis charger de faire un .jar qui doit être utilisé par un autre projet.

    Le souci c'est quand on import mon jar et qu'on lance l'autre projet il léve une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Exception in thread "main" C:\Users\workBook\workspace\test\.\src\com\eveacom\loader\ressource.xml (Le chemin d’accès spécifié est introuvable)
    sans nulle doute possible mon problème viens de mon jar a la ligne là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    File xmlFile = new File("./src/com/eveacom/loader/ressource.xml");
    le path n'est pas bon.

    ma question comment je peux indiquer le path dans mon projet pour qu'en il est en jar il arrive a le lire quand même ?

    merci d'avance.

  2. #2
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    Bonjour,

    Pour une piste,j'ai déjà eu le problème il y a un peu de temps déjà donc je ne voudrais pas dire de betise mais il me semble qu'à l'export d'un jar le dossier src n'est plus la.

    Ton nouveau chemin doit être "./com/eveacom/loader/ressource.xml".
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 62
    Points : 57
    Points
    57
    Par défaut
    je viens de tester ça ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    C:\Users\workBook\workspace\test\.\com\eveacom\loader\ressource.xml (Le chemin d’accès spécifié est introuvable)

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    Si le fichier XML recherché est inclus dans le JAR il vaut mieux utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getClass().getRessourceAsStream(/chemin/dans/le/jar/fichier.xml)
    Tu peux remplacer getClass() par le classloader que tu veux.

  5. #5
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    Dans le workspace il y a le src C:\Users\workBook\workspace\test\src\com mais essaye dans ton code ./com et export dans un jar pour voir.

    De toute façon pour un test le jar est une sorte d'archive donc tu peux l'ouvrir tu verras.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 62
    Points : 57
    Points
    57
    Par défaut
    ok mais le fichier xml et dans le jar et ne dois être lu et ouvert que par le jar.

    et la dans l'autre projet quant on fait ça il va cherche le xml dans son src/ a lui alors qu'il est dans le src du jar enfin dans un répertoire du jar.


    sur google j'ai trouver un truc pas mal mais je sais pas comment utilisé pour mon problème enfin je sais si c'est utile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(Loader.class.getProtectionDomain().getCodeSource().getLocation().getPath());
    Me retourne cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Users\workBook\Desktop\test.jar
    voici le code de mon loader de mon fichier xml dans mon jar
    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
     
    Module mod = new Module();
    		System.out.println();
    		File xmlFile = new File(Loader.class.getResourceAsStream("./src/com/eveacom/loader/ressource.xml")); // arbo du projet
    		SAXBuilder builder = new SAXBuilder();
    		try {
     
    				Document document = (Document) builder.build(xmlFile);				
    				Element rootNode =  document.getRootElement();		
    				mod.setIp(rootNode.getChildText("ip"));
     
    				// la on va charger toutes les position du module
    				@SuppressWarnings("rawtypes")
    				List list = rootNode.getChildren("position");
    				List<Position> positions = new ArrayList<Position>();
     
    				// la je parcours toutes les positions trouvé
    				for (int i = 0; i < list.size(); i++) {
     
    					   Element node = (Element) list.get(i);
    					   positions.add(new Position(node.getChildText("nom"), Integer.parseInt(node.getChildText("degre"))));
    					}
    				// je set toute les positions du module
    				mod.setPositions(positions);
     
    		  } catch (IOException io) {
    			System.out.println(io.getMessage());
    		  } catch (JDOMException jdomex) {
    			System.out.println(jdomex.getMessage());
    		  }
     
    		return mod;
    	}
    comment lui spécifier que le xml et dans le jar tout en sachant qu'on est dans le jar.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    En enlevant ./src

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getResourceAsStream("/com/eveacom/loader/ressource.xml")
    Pas la peine de savoir si tu exécutes depuis le jar ou non.
    Si tu exécutes depuis ton IDE, le fichier xml se trouve (normalement) avec tes classes dans le dossier build, donc dans le classpath, tout comme si il était dans le jar.

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 62
    Points : 57
    Points
    57
    Par défaut
    oki mais j'ai quand même un soucis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Loader.class.getResourceAsStream("/com/eveacom/loader/ressource.xml")

    c'est pas le bon type

  9. #9
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    c'est pas le bon type
    Hein ? Je n'ai pas compris ? Quel type ?

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 62
    Points : 57
    Points
    57
    Par défaut
    Désolé je m'explique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Loader.class.getResourceAsStream("./src/com/eveacom/loader/ressource.xml"
    ne peut pas instancier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File xmlFile = new File(Loader.class.getResourceAsStream("./src/com/eveacom/loader/ressource.xml"));
    ça me met

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The constructor File(InputStream) is undefined
    une idée ?

  11. #11
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Oui. Il suffit de lire la doc.

    getResourceAsStream comme son nom l'indique, retourne un InputStream.
    Et il n'existe pas de constructeur de File avec un InputStream en paramètre (Le message de ton compilateur est clair).

    Si tu veux récupérer l'URL du fichier, tu peux utiliser getResource() à la place de getResourceAsStream(), mais ça donne des URL particulière non utilisables si le fichier est dans un jar.

    Ex :
    c:\dossier\monjar.jar!/com/resources/fichier.xml

    D'où l'intérêt de récupérer le stream directement.
    Le stream tu peux le passer directement à ton SaxBuilder normalement.

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 62
    Points : 57
    Points
    57
    Par défaut
    ok ouaip apres un test ça merdouille.

    avec ta solution d'utilisez getResourceAsStream() qu'est ce qu'il faudrais que je change pour que sa passe dans mon code

    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
    Module mod = new Module();
    		System.out.println();
    		File xmlFile = new File(Loader.class.getResource("./com/eveacom/loader/ressource.xml").getFile()); // à change j'imagine
    		SAXBuilder builder = new SAXBuilder();
    		try {
     
    				Document document = (Document) builder.build(xmlFile);				
    				Element rootNode =  document.getRootElement();		
    				mod.setIp(rootNode.getChildText("ip"));
     
    				// la on va charger toutes les position du module
    				@SuppressWarnings("rawtypes")
    				List list = rootNode.getChildren("position");
    				List<Position> positions = new ArrayList<Position>();
     
    				// la je parcours toutes les positions trouvé
    				for (int i = 0; i < list.size(); i++) {
     
    					   Element node = (Element) list.get(i);
    					   positions.add(new Position(node.getChildText("nom"), Integer.parseInt(node.getChildText("degre"))));
    					}
    				// je set toute les positions du module
    				mod.setPositions(positions);
     
    		  } catch (IOException io) {
    			System.out.println(io.getMessage());
    		  } catch (JDOMException jdomex) {
    			System.out.println(jdomex.getMessage());
    		  }
     
    		return mod;

  13. #13
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Lis tout ce que j'ai écrit...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    InputStream stream= Loader.class.getResourceAsStream("/com/eveacom/loader/ressource.xml"); // à change j'imagine
    		SAXBuilder builder = new SAXBuilder();
    		try {
     
    				Document document = (Document) builder.build(stream);

  14. #14
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 62
    Points : 57
    Points
    57
    Par défaut
    ok j'ai fais comme tu as dit

    voici le nouveau code
    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
    Module mod = new Module();
    		//File xmlFile = new File(Loader.class.getResource("./src/com/eveacom/loader/ressource.xml").getFile()); // arbo du projet
    		SAXBuilder builder = new SAXBuilder();
    		try {
     
    				Document document = (Document) builder.build(Loader.class.getResourceAsStream("./com/eveacom/loader/ressource.xml"));				
    				Element rootNode =  document.getRootElement();		
    				mod.setIp(rootNode.getChildText("ip"));
     
    				// la on va charger toutes les position du module
    				@SuppressWarnings("rawtypes")
    				List list = rootNode.getChildren("position");
    				List<Position> positions = new ArrayList<Position>();
     
    				// la je parcours toutes les positions trouvé
    				for (int i = 0; i < list.size(); i++) {
     
    					   Element node = (Element) list.get(i);
    					   positions.add(new Position(node.getChildText("nom"), Integer.parseInt(node.getChildText("degre"))));
    					}
    				// je set toute les positions du module
    				mod.setPositions(positions);
     
    		  } catch (IOException io) {
    			System.out.println(io.getMessage());
    		  } catch (JDOMException jdomex) {
    			System.out.println(jdomex.getMessage());
    		  }
     
    		return mod;
    des exceptions sont lever :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    	at java.util.ArrayList.rangeCheck(Unknown Source)
    	at java.util.ArrayList.get(Unknown Source)
    	at com.eveacom.move.Mouvement.moveAtoB(Mouvement.java:20)
    	at com.eveacom.main.MainClass.main(MainClass.java:15)
    je pense que j'y suis presque soit le path et pas bon sois encore un truc gêne.

    ça doit être mon arrayList de position qui est null

    edit résolu :

    voici le nouveau code : le path était pas bon merci encore mathieu +1 pour toi tu es géniale.

  15. #15
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Quand tu poste une StackTrace, précise quelle est la ligne qui pose problème :
    at com.eveacom.move.Mouvement.moveAtoB(Mouvement.java:20)
    Dans ton cas il faut que tu nous précises quelle est la ligne 20 dans Mouvement.java. Et poster le code (ni trop, ni pas assez) qui entoure cette ligne.

    Dans le code que tu as posté, le seul List.get() que tu as c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int i = 0; i < list.size(); i++) {
        Element node = (Element) list.get(i);
        ...
    }
    Mais avec le for il n'y a pas de raison que ça envoie l'exception. Elle doit venir d'ailleurs.

  16. #16
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 62
    Points : 57
    Points
    57
    Par défaut
    prend bonne note de cela je vais m’entraîner à faire cela. et tu avait raison le souci venez de plus haut : en cause mauvais path j'avais laisser ("./com/....") au lieu de ("/com/...."). merci encore

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

Discussions similaires

  1. Problème chargement fichier XML vers un DataSet
    Par verbal34 dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 11/07/2010, 23h26
  2. Problème en fichier XML
    Par soumti84 dans le forum Format d'échange (XML, JSON...)
    Réponses: 23
    Dernier message: 18/04/2009, 17h12
  3. Problème écriture fichier xml
    Par ludo24 dans le forum ASP
    Réponses: 23
    Dernier message: 23/06/2008, 11h48
  4. [C#] Problème chargement fichier xml dans treeview
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/06/2006, 14h10
  5. [SAX] Problème lecture fichier xml
    Par BernardT dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 07/07/2005, 18h11

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