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 plusieurs lignes - BufferedReader


Sujet :

Entrée/Sortie Java

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 40
    Par défaut Lire plusieurs lignes - BufferedReader
    Bonjour, j'ai un soucis avec la classe BufferedReader pour lire plusieurs lignes en une fois. Lorsque j'envoie un message au serveur, tout le texte est envoyé en une fois. Mais lorsque je le réceptionne, le serveur le reçoit lignes par lignes et donc affiche plusieurs fois "message reçu". (Comme vous l'aurez deviné, j'utilise la méthode readLine() )

    Exemple :
    Le client envoie :
    "Bonjour,
    je suis un message
    sur plusieurs lignes."

    Le serveur reçoit :
    "message reçu : Bonjour,
    message reçu : je suis un message
    message reçu : sur plusieurs lignes.
    "

    J'aimerais que le serveur le reçoive plutôt comme ceci :
    "message reçu : Bonjour,
    je suis un message
    sur plusieurs lignes."

    Existe-t-il une méthode pour faire ça proprement ou je dois chipoter dans mon algorithme (pas encore trouvé d'idées) ? :/ Merci d'avance !

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Je ne connais pas de méthode toute faite fournie avec Java, mais ça n'a pas l'air bien difficile de le faire toi-même.

    - Si tu te moques de conserver si les fins de ligne sont plutôt \r\n ou \n ou \r, il te suffit d'appeler readLine() autant de fois que voulu, puis de les concaténer avec un StringBuilder.
    - Si tu veux conserver les marqueurs de fin de ligne tels que reçus, c'est un peu plus compliqué, ça consiste à refaire BufferedReader toi-même. Mais ce n'est pas non plus la mer à boire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 40
    Par défaut
    En fait, je ne veux pas retirer les caractères d'échappements justement et refaire BufferedReader n'est pas de mon niveau je pense. On pourrait remplacer le comportement de readLine() de sorte qu'il ne s'arrête pas à une ligne mais plutôt un caractère personnalisé marquant la fin de mon message ?
    Merci

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 149
    Par défaut
    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
    		File file = new File("text.txt");
        	FileReader fr;
    		FileWriter fw;
    		String ligne1;
                    String ligne2;
    		try {
    			fr = new FileReader(file.getAbsoluteFile());
    			BufferedReader bw = new BufferedReader(fr);	
    			ligne1 = bw.readLine(); //On lit la 1ère ligne
    			ligne2 = bw.readLine(); //On lit la 2ème ligne
     
    		} catch (FileNotFoundException e1) {
    			e1.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    Ce n'est pas compliqué! Il suffit de ré-invoquer la méthode! Elle fonctionne comme celle du scanner et passe la ligne une fois lue.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Je pense qu'il ne sait pas de quoi il parle, mais il a bien dit clairement qu'il ne doit pas perdre les \r ou \n ou \r\n, et donc, dans ce cas-là, c'est plus compliqué puisque readLine() les bouffe.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 149
    Par défaut
    J'ai utilisé le code que j'ai proposé avec un fichier sans séparateur et ça fonctionne très bien. Pas besoin de \n ou \r ... avec le BufferedReader!

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 40
    Par défaut
    Le problème est que toi tu lis lignes par lignes dans ton code!
    Moi, je dois tout lire en une seule fois ! C'est la condition de mon while... Ce à quoi j'ai pensé, c'est d'englober le texte complet !dans une Classe du genre MonMessage et j'envoie à mon client un objet de type MonMessage (J'ai pas encore implémenté ça mais normalement ça devrait aller)

    JeremGamer, ton code ne fonctionne pas pour moi car mon client affiche directement ce qu'il reçoit du serveur et comme readLine ne lit qu'une ligne, il va considérer que le serveur lui a envoyé pleins de message or c'est faux.

    Ceci est la partie que j'utilisais pour la réception d'un message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    while ((msg = fluxEntrant.readLine()) != null)
            {
                zoneMessages.setText(zoneMessages.getText()
                                     + "Message recu : "
                                     + msg
                                     + "\n");
            }

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    T'aurais pu le dire dès le début... On en a rien à cirer des lignes, tu as besoin d'envoyer plusieurs messages et chaque message a besoin d'être lu en une fois. C'est pourtant pas compliqué à expliquer.

    Citation Envoyé par mourad1081 Voir le message
    Ce à quoi j'ai pensé, c'est d'englober le texte complet !dans une Classe du genre MonMessage et j'envoie à mon client un objet de type MonMessage (J'ai pas encore implémenté ça mais normalement ça devrait aller)
    C'est de loin la meilleure façon de faire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 40
    Par défaut
    Désolé, j'me suis très mal expliqué alors :/

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

Discussions similaires

  1. lire plusieurs lignes d'un fichier csv
    Par beyo dans le forum Langage
    Réponses: 3
    Dernier message: 14/01/2014, 18h26
  2. Comment lire plusieurs lignes à l'écran
    Par guizaniseifislam dans le forum Général Java
    Réponses: 31
    Dernier message: 22/03/2012, 05h50
  3. lire plusieurs ligne d'une table
    Par poke95 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 25/09/2011, 23h17
  4. Réponses: 12
    Dernier message: 18/06/2006, 19h42
  5. lire plusieurs lignes avec fgetc
    Par Mousk dans le forum C
    Réponses: 7
    Dernier message: 25/03/2006, 18h24

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