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 :

Lire ligne précise fichier XML


Sujet :

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

  1. #1
    Membre actif Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Points : 278
    Points
    278
    Par défaut Lire ligne précise fichier XML
    Bonjour,
    après avoir lu la très complète FAQ "Java - Flux & Fichiers"
    Et d'après ce code, qui m'interessai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    String filePath = "g:\\fichier.txt";
     
    Scanner scanner=new Scanner(new File(filePath));
     
    // On boucle sur chaque champ detecté
    while (scanner.hasNextLine()) {
        String line = scanner.nextLine();
     
        System.out.println(line);
    	//faites ici votre traitement
    }
     
    scanner.close();
    J'arrive à lire toutes les lignes, mais comment faire si je veux seulement lire la ligne 8 de mon fichier ? et si possible sans les balises? ( c'est une URL que je souhaite récupérer )

    Merci a vous.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 30
    Points
    30
    Par défaut
    Si tu veux lire la ligne 8 pourquoi ne pas essayer :

    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
     
    String filePath = "g:\\fichier.txt";
     
    Scanner scanner=new Scanner(new File(filePath));
     
    int i=0;
    while(i<7 && scanner.hasNextLine()){
          scanner.nextLine();
     
           i++;
    }
     
        String line = scanner.nextLine();
     
        System.out.println(line);//lira la ligne 8
     
     
     
    scanner.close();

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Points : 422
    Points
    422
    Par défaut
    Il faudrait voir un exemple de ton fichier, mais tes balises te permettront sûrement de pouvoir identifier facilement la partie du fichier à extraire en utilisant les méthodes de String (contains, startWith, split, ... ...).
    Une fois la chaine extraite, tu peux quitter ton while avec un break.

  4. #4
    Membre actif Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Points : 278
    Points
    278
    Par défaut
    Mon fichier XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="UTF-8"?>
    <java version="1.6.0_20" class="java.beans.XMLDecoder">
     <object class="javax.swing.JTextField">
      <void property="columns">
       <int>60</int>
      </void>
      <void property="text">
        <string>C:\Users\(utilisateur)\documents\vlc\vlc.exe</string>
    </void>
    </object>
    </java>
    Sinon je n'avais pas pensé à la boucle, celà fonctionne parfaitement désormais, merci. Me manque plus qu'à stocker cette ligne dans une variable.

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    t es au courant qu'avec du xml, tu n'a aucune garantie que ca ne sera pas sur une autre ligne demain?

  6. #6
    Membre actif Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Points : 278
    Points
    278
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    t es au courant qu'avec du xml, tu n'a aucune garantie que ca ne sera pas sur une autre ligne demain?
    Non, j'ai poser la question auparavant ici sur Dev.com et ont m'a orienté vers du XML alors... je ne sais pas.
    Et tu sais, ce n'est qu'un petit projet pour mon examen final. Il n'ira pas en prod.

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    Come tchize_ a dit parfois ton flux xml (fichier) n'a qu'une seule ligne (pas de retour de ligne)

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 30
    Points
    30
    Par défaut
    oui avec ma methode c'est surtout du temporaire pour tester le reste de ton code...sinon si tu cherche quelque chose en particulier tu peut faire un petit bout de code qui ressemble à çà (admetons que tu cherche le contenu de init)

    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
     
    String ligne="";
    int entier=0;
    while(scanner.hasNext())
    {
      ligne=scanner.nextLine();
    /*si la balise est <init>*/
      if(ligne.substring(ligne.indexOf('<'), ligne.indexOf('>') +1).equals("<init>"))
        {
                /*dans ce cas on recupere l'interieur des balises*/
                entier= Integer.parseInt(ligne.substring(ligne.indexOf('>') + 1,ligne.lastIndexOf('<')));
                break;
        }
     
    }
     
    return entier;

  9. #9
    Membre actif Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Points : 278
    Points
    278
    Par défaut
    Décidement je n'arrive pas à enlever les balises.
    J'ai une exception de thread, enfin je crois, quand je demande à mon appli (via mon GUI) d'aller recupérer la ligne via la fonction que tu m'a conseillé, il me dit dans le debugger "AWT-EventQueue-0](Suspended (exception StringIndexOutOfBoundsException))
    EventDispatchThread.run() line : not available.
    Je ne sais pas trop.. dois-je afficher mon bout de code concerné ? Car la machine sur laquelle je travail n'est pas sur le réseau, difficile d'afficher le code sans. ( ni clé usb pour transferer )
    Merci

  10. #10
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par pendoRa Voir le message
    dans le debugger "AWT-EventQueue-0](Suspended (exception StringIndexOutOfBoundsException))
    Tu accède au dela de la fin d'un String dans ton code.

  11. #11
    Membre actif Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Points : 278
    Points
    278
    Par défaut
    Bonjour,
    comment je fais pour ne pas dépasser ?
    Je n'ai pas trouvé sur la FAQ XML : (
    Merci pour l'aide

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    ca a rien a voir avec xml mais avec ton code. On peut pas t'aider plus car

    1) on a pas le code
    2) on a pas le stacktrace complet de l'erreur

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Points : 422
    Points
    422
    Par défaut
    Peux-être ça, mais, il ne retournera que le contenu de la première balise <string>. Pour ton exemple, ça devrait marcher.

    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
     
    String filePath = "g:\\fichier.txt";
     
    Scanner scanner=new Scanner(new File(filePath));
     
    String path;
     
    while (scanner.hasNextLine()) {
    	String line = scanner.nextLine();
    	if(line.toLowerCase().contains("<string>")){
    		int a = line.toLowerCase().indexOf("<string>")+8;
    		int b = line.toLowerCase().indexOf("</string>");
     
    		path = line.substring(a, b);
                    break;
    	}
    }
     
    scanner.close();
     
    System.out.println(path);
    Edit : oula... les copier/coller me réussissent pas...

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 30
    Points
    30
    Par défaut
    J'ai trouvé pourquoi, essaie et tu vera.

    créé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String line = "<string>C:\Users\(utilisateur)\documents\vlc\vlc.exe</string>";
    et tu verra une erreur...

    l'erreur ? à cause de la chaine java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String line = "<string>C:\\Users\\(utilisateur)\\documents\\vlc\\vlc.exe</string>";

    donc pour moi, essaie de modifier ton fichier xml ...peut-être que cela résoudra ton problème...

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Points : 422
    Points
    422
    Par défaut
    Personnellement, je ne pense pas qu'il faille toucher au xml.
    Déjà ce n'est peut-être pas lui qui le génère, de plus le xml est peut-être utiliser ailleur, et enfin le chemin est correcte sous cette forme.
    Si les caractères spéciaux le gène, c'est plutôt dans son code qu'il doit gérer ce problème.

  16. #16
    Membre actif Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Points : 278
    Points
    278
    Par défaut
    Le fichier XML est généré par mon code, donc est différent à chaque utilisateur.

    Mon erreur compète :

    Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException : String index out of range: -1
    at java.lang.String.substring(Unknow Source)
    at fenetrePrincipale$6.mouseClicked(FenetrePrincipal.java:490)
    at java.awt.AWTEventMulticaster.mouseClicked(Unknow Source)
    at java.awt.AWTEventMulticaster.mouseClicked(Unknow Source)
    at java.awt.Component.processMouseEvent(Unknow Source)
    at javax.swing.JComponent.processMouseEvent(Unknow Source)
    at java.awt.Component.processEvent(Unknow Source)
    at java.awt.Container.processEvent(Unknow Source)



    Je peux pas poster mon code pour le moment, veuillez m'en excuser je n'ai pas les ressources nécéssaires.

  17. #17
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par pendoRa Voir le message

    Je peux pas poster mon code pour le moment, veuillez m'en excuser je n'ai pas les ressources nécéssaires.
    Ben alors tu regarde à (FenetrePrincipal.java:490), ton substring utilise des bornes incorrectes (en l'occurence -1 n'est pas un index correct)

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 30
    Points
    30
    Par défaut
    Ok ,j'avance un truc je suis pas sur :

    Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException : String index out of range: -1
    at java.lang.String.substring(Unknow Source)


    peut-être que c'est ton if qui ne fonctionne pas, donc du coup çà pète...

    Mets des system.out.print partout pour voir où çà rentre et ce qui rentre(roohh lalalaaa) ...au pire si c'est pas çà , le debbuguage n'est pas perdu....

  19. #19
    Membre actif Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Points : 278
    Points
    278
    Par défaut
    Oui effectivement, la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(ligne.substring(ligne.indexOf('<'), ligne.indexOf('>') +1).equals("<string>))
    Je ne vois pas ou ce trouve l'erreur :s Et j'ai mis justement plein de System.out.println(xx) pour voir un peu l'acheminement de l'info.. en vain, sa bug juste avant d'afficher (entier) ou (ligne)
    Sinon on m'a conseillé d'utiliser XPath, serait-ce une meilleur alternative ? ( Je vai lire la FAQ)
    Merci pour votre aide.

  20. #20
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par pendoRa Voir le message
    Je ne vois pas ou ce trouve l'erreur :s
    indexOf renvoie -1 si le caractère n'est pas présent dans la ligne, tu ne traite pas ces cas là.

    Sinon on m'a conseillé d'utiliser XPath, serait-ce une meilleur alternative ? ( Je vai lire la FAQ)
    Oui, un petit peu de temps à apprendre, genre 1 après midi, mais que de temps gagné et tu gèrera vraiment ton xml correctement

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. lire dans un fichier xml depuis une tâche ant
    Par wildmary dans le forum ANT
    Réponses: 7
    Dernier message: 03/08/2009, 12h51
  2. problème avec .jar : lire depuis un fichier xml
    Par ALAE4000 dans le forum Format d'échange (XML, JSON...)
    Réponses: 13
    Dernier message: 28/04/2008, 10h38
  3. Lecture d'une ligne précise fichier txt
    Par House MD dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/11/2007, 15h20
  4. supprimer ligne de fichier xml
    Par wajdiisi2007 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 22/08/2007, 17h09
  5. Comment lire dans un fichier XML?
    Par yosthegost dans le forum Delphi
    Réponses: 5
    Dernier message: 29/05/2006, 17h50

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