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 :

Problème de lecture de fichier ligne à ligne


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par défaut Problème de lecture de fichier ligne à ligne
    Bonjour,

    Je suis en Java 5.0 et j'essaye de lire un fichier text ligne à ligne pour en extraire les données et les enregistrer dans une base de données.
    Lors de la lecture du fichier, ma fonction s'arrête à la ligne 7849 alors que j'ai 14000 lignes. De plus, lorsque j'affiche cette dernière ligne extraite, je n'ai que la moitié des informations, comme si la fin de la ligne n'était pas prise en compte, et le programme ne voit pas de lignes supplémentaires à afficher.
    La fonction utilisée est la suivante:

    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'ai alors essayé avec le code suivant et le programme réussit cette fois à lire l'intégralité du fichier:

    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
    String filePath = "g:\\fichier.txt";
     
    try{
    // Création du flux bufférisé sur un FileReader, immédiatement suivi par un 
    // try/finally, ce qui permet de ne fermer le flux QUE s'il le reader
    // est correctement instancié (évite les NullPointerException)
    BufferedReader buff = new BufferedReader(new FileReader(filePath));
     
    try {
    String line;
    // Lecture du fichier ligne par ligne. Cette boucle se termine
    // quand la méthode retourne la valeur null.
    while ((line = buff.readLine()) != null) {
    System.out.println(line);
    //faites ici votre traitement
    }
    } finally {
    // dans tous les cas, on ferme nos flux
    buff.close();
    }
    } catch (IOException ioe) {
    // erreur de fermeture des flux
    System.out.println("Erreur --" + ioe.toString());
    }
    Le fichier est codé au format DOS. En affichant les caractères spéciaux sous ultraEdit, je ne relève aucune incohérence dans le fichier.

    Savez-vous d'où peut venir le problème ?

    Merci par avance pour vos conseils.

    Thib

  2. #2
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2006
    Messages : 35
    Par défaut
    Bonjour.

    Tu n'as pas d'exception levée ?

  3. #3
    Membre confirmé Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par défaut
    Malheureusement aucune exception n'est levée. C'est la raison qui me pousse à penser que le problème vient du fichier...
    Comment faire pour analyser le fichier en Java pour voir s'il n'y a pas des caractères invisibles à l'éditeur mais qui font penser au Java que le fichier est terminé alors qu'il y a encore plein de lignes derrière ?

  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 : 45
    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
    le problème c'est que vous utilisez scanner pour remplacer le travail de bufferedReader, il n'a pas été conçu pour ça. Le scanner est prévu pour lire des données structurée (genre un int, puis un float, puis 2 ints, etc) , pas pour "bêtement" lire ligne à ligne.

    le but de nextLine dans le scanner n'est pas de lire une ligne mais de "sauter les entrées jusqu'à la ligne suivante"

    Il est probable que hasNextLine vous retourne false au milieu du fichier parce qu'il y a par exemple une ligne vide.

  5. #5
    Membre confirmé Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par défaut
    En fait je ne l'ai pas précisé mais j'utilise le scanner pour lire des données structurées. Toutes mes lignes ont des données qui sont soit séparées par une virgule (csv), soit par une tabulation. Donc pour chaque ligne, je fait un split(séparateur) pour récupérer les données que j'identifie (chaîne de caractères si ce sont des libellés, ou int si ce sont des code spécifiques).

    Est-ce que le scanner doit en principe fonctionner dans ce cas ? Car pour tous les fichiers que j'ai testé jusqu'à présent, ça fonctionne, il n'y a que pour ce fichier en question que ça ne passe pas.... C'est pour ça que je me pose la question de savoir si le problème vient du fichier ou du code source du programme !!

  6. #6
    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 : 45
    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
    si tu fais le split après avoir lu la ligne, je ne vois pas l'utilité d'utiliser une classe complexe comme Scanner. Il aurait eu sont utilité si tu avais utilisé ses méthode nextInt etc.

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

Discussions similaires

  1. Problème de lecture d'un fichier texte ligne à ligne
    Par petit rabot dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 25/05/2011, 14h04
  2. Réponses: 1
    Dernier message: 12/06/2008, 11h48
  3. Problème de lecture de XML en ligne
    Par Jenkai dans le forum Flash
    Réponses: 1
    Dernier message: 02/09/2007, 19h00
  4. [POI] Problème de lecture des fichiers Word
    Par Dari dans le forum Documents
    Réponses: 9
    Dernier message: 05/07/2007, 14h08
  5. Lecture de fichier - dernière ligne non prise en compte
    Par JulienPles dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/03/2005, 11h57

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