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

Langage Java Discussion :

lecture à partir d'un BufferedReader


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2006
    Messages : 48
    Par défaut lecture à partir d'un BufferedReader
    Salut à tous!

    Alors voilà mon problème, j'aimerais lire ligne par ligne a partir d'un BufferedReader, et afficher au fur et a mesure les lignes lues. Comme je sais pas combien y en a, j'aimerai bien que dès qu'il n'y a plus de ligne, il s'arrête de lire. J'ai fait le code suivant, mais dans ma situation, lorsque il n'y a plus rien à lire, il continue à attendre perpetuellement une nouvelle ligne (puisqu'il attend une nouvelle ligne pour savoir si vraiment il n'y plus rien à lire)...
    Je sais pas tellement comment faire, des idées ?

    merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    requestFromServer = new BufferedReader(new InputStreamReader(requestSocket.getInputStream()));
     
    String reponse;
    while ((reponse = requestFromServer.readLine()) != null){
    	System.out.println(reponse);
    }

  2. #2
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Quand ta chaîne est null, c'est fini

    Sinon, je te conseille plutôt java.util.Scanner.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(sc.hasNextLine()) {
        String s = sc.nextLine();
        ...
    }

  3. #3
    Membre éprouvé
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Par défaut
    Bonjour,

    Si tu as plusieurs lignes en entrée de ta Stream, je pense que le seul moyen est de tester une séquence indiquant la fin du message, genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ( !(s = requestFromServer.readLine () ).equals ("fin") )

  4. #4
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par TheLeadingEdge
    Bonjour,

    Si tu as plusieurs lignes en entrée de ta Stream, je pense que le seul moyen est de tester une séquence indiquant la fin du message, genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ( !(s = requestFromServer.readLine () ).equals ("fin") )
    Non, tu testes si la chaîne est null.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Quel est l'avantage de Scanner, par rapport au buffered reader?
    Elle permet de faire beaucoup plus de choses, de ne pas gérer uniquement les chaînes de caractères, et aussi de gérer les expressions régulières.

    (et dans le code c'est plus lisible de faire new Scanner(stream) que new BufferedReader(new InputStreamReader(stream)))...

  5. #5
    Membre éclairé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Par défaut
    Elle permet de faire beaucoup plus de choses, de ne pas gérer uniquement les chaînes de caractères, et aussi de gérer les expressions régulières.

    (et dans le code c'est plus lisible de faire new Scanner(stream) que new BufferedReader(new InputStreamReader(stream)))...
    OK, merci beaucoup!

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Par défaut
    Salut.

    J'avoue que je ne comprends pas pourquoi le programme ne sort pas de ta boucle. Perso, j'ai déjà fait ça plusieurs fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    BufferedReader bf = new BufferedReader(...);
    String maChaine = bf.readLine();
    while (maChaine != null) {
         ...
         maChaine = bf.readLine();
    }
    sans qu'il y ait de problème...
    Je dirais volontier que les 2 manières d'écrire sont équivalentes, mais peut-être que non ??

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2006
    Messages : 48
    Par défaut
    merci pour vos réponses!

    En fait je fait une sorte de client FTP, et il s'agit "d'écouter" les messages reçus sur le canal de commandes en FTP. Il n'y donc pas de fin explicite genre EOF.

    je donne un exemple d'execution qui illustre mon problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $ java monProgramme
    220-FTP server ready.
    220-<<
    220-A few hours grace before the madness begins again.
    220->>
    220 Ceci est un systeme prive - Aucun utilisateur anonyme autorise
    Après la 5ième ligne, le programme fait encore un readLine() (pour voir si la ligne suivant est null), mais le serveur n'envoye plus rien, et le programme attend donc indéfiniment.
    Utiliser la classe Scanner me paraît une bonne idée, mais je rencontre qqes problèmes avec (je sais pas encore très bien pourquoi), je vais aussi peut-être essayer de lire mon BufferedReader à partir d'un autre thread... Je vous tiens au courant, toutes vos suggestions sont les bienvenues!

    Merci

  8. #8
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par TheLeadingEdge
    Bonjour,

    Si tu as plusieurs lignes en entrée de ta Stream, je pense que le seul moyen est de tester une séquence indiquant la fin du message, genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ( !(s = requestFromServer.readLine () ).equals ("fin") )
    Excuse-moi, je t'ai dis tu testes si la chaîne est null, mais à partir d'une socket c vrai tu as raison

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2006
    Messages : 48
    Par défaut
    le problème c'est que ya pas de séquence indiquant la fin du message...

  10. #10
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par ratakses
    le problème c'est que ya pas de séquence indiquant la fin du message...
    Donc tu ne peux pas savoir si le message est fini...

    Dans ce cas, configure ta socket pour avoir une lecture NON BLOQUANTE, et vérifie de temps en temps si un nouveau message est arrivé...

  11. #11
    Membre éclairé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Par défaut
    Citation Envoyé par ®om
    Quand ta chaîne est null, c'est fini

    Sinon, je te conseille plutôt java.util.Scanner.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(sc.hasNextLine()) {
        String s = sc.nextLine();
        ...
    }
    Quel est l'avantage de Scanner, par rapport au buffered reader?

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2006
    Messages : 48
    Par défaut
    Alors voilà c'est bon j'ai créé un thread qui recoit en paramètre le stream et affiche tout ce qu'il recoit dans un while(true)... voila voila

  13. #13
    Membre éclairé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Par défaut
    n'oublie pas si c'est tout bon!

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

Discussions similaires

  1. Lecture à partir d'un fichier
    Par sandball22 dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 31/01/2011, 22h06
  2. Lecture à partir d'un fichier texte
    Par bigmonstre dans le forum Débuter
    Réponses: 2
    Dernier message: 29/11/2010, 15h50
  3. lecture à partir d'un fichier PDF
    Par men1986 dans le forum Wildfly/JBoss
    Réponses: 0
    Dernier message: 24/07/2009, 01h14
  4. Réponses: 13
    Dernier message: 29/04/2008, 09h41
  5. Probleme pour la lecture de tabular avec BufferedReader
    Par Les2A dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 10/04/2007, 14h18

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