2010-11-01 6 views
5

J'utilise la fonction suivante pour écrire une chaîne dans un fichier. La chaîne est formatée avec des caractères de nouvelle ligne.Java: BufferedWriter sautant la ligne de retour

Par exemple, text = "sometext\nsomemoretext\nlastword";

Je suis en mesure de voir les sauts de ligne du fichier de sortie lorsque je fais:

type outputfile.txt 

Cependant, quand j'ouvre le texte dans le bloc-notes, je ne vois pas la nouvelles lignes. Tout se présente sur une seule ligne.

Pourquoi cela se produit-il? Comment puis-je m'assurer que j'écris correctement le texte pour pouvoir le voir correctement (formaté) dans le bloc-notes.

private static void FlushText(String text, File file) 
    { 
     Writer writer = null; 
     try 
     {   
      writer = new BufferedWriter(new FileWriter(file)); 
      writer.write(text); 
     } 
     catch (FileNotFoundException e) 
     { 
      e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      try 
      { 
       if (writer != null) 
       { 
        writer.close(); 
       } 
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    } 

Répondre

10

sur les fenêtres, les nouvelles lignes sont représentées, par convention, comme un retour de chariot suivi d'un saut de ligne (CR + LF), à savoir \r\n.

Des Newline wikipedia page:

Les éditeurs de texte sont souvent utilisés pour convertir un fichier texte entre différents formats de nouvelle ligne; les éditeurs les plus modernes peuvent lire et écrire des fichiers en utilisant au moins les différentes conventions ASCII CR/LF . Le bloc-notes de l'éditeur Windows standard n'est pas l'un d'entre eux (même si Wordpad est).

Bloc-notes doit afficher la sortie correctement si vous changez la chaîne à:

text = "sometext\r\nsomemoretext\r\nlastword"; 

Si vous voulez un moyen de plate-forme indépendante de représenter une nouvelle ligne, utilisez System.getProperty("line.separator"); Pour le cas spécifique d'un BufferedWriter , allez avec ce que suggère bemace.

+3

Oh. Maintenant j'utilise System.getProperty ("line.separator"); Impossible d'utiliser BufferedWriter.newLine() car j'ai besoin de remplir la chaîne complète avant de l'écrire. – devnull

+0

Cela m'a sauvé. Je travaille avec Wicket, et BufferedWriter.newLine() a travaillé localement, mais pas sur tomcat .. J'ai essayé le \ r \ n et cela a fonctionné comme un charme .. Merci! – eaglei22

7

C'est pourquoi vous devez utiliser BufferedWriter.newLine() au lieu de coder en dur vos séparateurs de ligne. Il prendra soin de choisir la bonne version pour la plate-forme sur laquelle vous travaillez actuellement.

Questions connexes