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

Entrée/Sortie Java Discussion :

lire ligne par ligne dans un stream


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de zolive
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 152
    Par défaut lire ligne par ligne dans un stream
    Bonjour à tous,
    Je cherche à lire dans un stream une seule ligne. pour cela j'ai ecrit la fonction read suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public string read(final InputStream input,final OutputStream output) throws IOException {
            int caracter = 0;
     
            final InputStreamReader stream = new InputStreamReader(input, encoding);
            final BufferedReader bufferReader = new BufferedReader(stream,1);
     
            String buffer=bufferReader.readLine();;
    return buffer;
    }
    Sur un Stream issu d'un fichier il lit bien la premiere ligne mais pas la suivante.
    Le probleme c'est que quand je rappelle cette fonction le readLine me retourne null.

    par contre si je fais une boucle sur buffer.readLine() il me lit bien tout le fichier ligne à ligne... mais c'est pas ce que je cherche à faire je souhaite lire juste une ligne dans le stream, puis sortir de la fonction pour pouvoir ensuite la rappeller quand j'en ai besoin pour lire la ligne suivante.

    Merci d'avance.

  2. #2
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 30
    Par défaut
    Alors si j'ai bien compris ce que tu veux faire c'est lire les lignes d'un fichier une par une quand tu appelles ta fonction ?

    Moi pour lire un fichier, j'utilise souvent un bufferedReader comme toi mais je l'utilise avec un FileReader. Par contre le problème je crois que c'est que tu réinitialise tout le temps ton bufferedReader au bout de ta fonction et donc tu lis tout le temps la première ligne. Il faudrait peut être que tu l'initialise dans ton constructeur par exemple et que tu fasses appel à ton bufferedReader après sans le réinitialiser.

    J'espère que ca pourra t'aider

  3. #3
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    C'est le BufferedReader qui gère la lecture ligne par ligne. Comme tu en recrées un à chaque nouvel appel de ta méthode, j'imagine qu'il est un peu paumé dans ses comptes à chaque fois.

    Il faut que tu le passes en paramètre, probablement à la place de ton input (et il faut passer toujours le même, evidemment).

  4. #4
    Membre confirmé Avatar de zolive
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 152
    Par défaut
    en fait la signature du read est imposé par une interface que je doit respecter.
    J'ai essayé egalement de lire caractere par caractere le stream initial et d'arreter de lire sur le '\n' ou un retour negatif sur le read mais le probleme suivant se pose dans le cas de retour à la ligne on a de temps en temps '\n' et de temps en temps '\n\r' ce qui fait que l'on doit tester au dela du caractere '\n' deplus des carcateres tel que 'ç' retourne -1 sur le read...

  5. #5
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Pourrais-tu nous expliquer, de la façon la plus générale possible, ce que tu dois faire ?

  6. #6
    Membre confirmé Avatar de zolive
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 152
    Par défaut
    En regardant de plus pres la solution proposé par ekard je pense quelle devrait repondre à mon problème. Je suis prenneur par contre de la reponse à la question suivante Est ce que dès que l' on instancie un BufferReader sur un stream existant, il "vide" le stream à son profit ? Ca m'expliquerait pourquoi le deuxieme appel à ma fonction read comme il y a création d'un deuxieme BufferReader sur le meme stream il ne trouve plus rien à lire.
    Merci pour tout

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

Discussions similaires

  1. Lire un fichier ligne par ligne
    Par lephyrexian dans le forum VBScript
    Réponses: 2
    Dernier message: 07/12/2006, 08h29
  2. Lire un fichier ligne par ligne avec Awk
    Par Krispy dans le forum Linux
    Réponses: 8
    Dernier message: 07/09/2006, 15h14
  3. Lire un fichier ligne par ligne
    Par Guillaume602 dans le forum C
    Réponses: 3
    Dernier message: 18/03/2006, 21h41
  4. lire un fichier ligne par ligne
    Par peuf23 dans le forum C
    Réponses: 6
    Dernier message: 21/09/2005, 10h43

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