2010-11-01 15 views
5

Estoy usando la siguiente función para escribir una cadena en un archivo. La cadena está formateada con caracteres de nueva línea.Java: BufferedWriter omitiendo la nueva línea

Por ejemplo, text = "sometext\nsomemoretext\nlastword";

soy capaz de ver los caracteres de nueva línea del archivo de salida cuando lo haga:

type outputfile.txt 

Sin embargo, cuando abro el texto en el bloc de notas que no puedo ver el nuevas líneas. Todo aparece en una sola línea.

¿Por qué sucede esto? ¿Cómo puedo asegurarme de que escribo el texto correctamente para poder verlo correctamente (formateado) en el bloc de notas?

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(); 
      } 
     } 
    } 

Respuesta

10

En las ventanas, las nuevas líneas están representadas, por convención, como un retorno de carro seguido de un avance de línea (CR + LF), es decir \r\n.

De los Newline wikipedia page:

Editores de texto se utilizan a menudo para convertir un archivo de texto entre diferentes formatos de nueva línea; la mayoría de los editores modernos pueden leer y escribir archivos usando al menos las diferentes convenciones ASCII CR/LF . El Bloc de notas estándar del editor Windows no es uno de ellos (aunque Wordpad sí lo es).

Bloc de notas debe mostrar la salida correctamente si cambia la cadena a:

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

Si desea una forma independiente de la plataforma de representar una nueva línea, utilice System.getProperty("line.separator"); Para el caso específico de un BufferedWriter , ve con lo que bemace sugiere.

+3

Oh. Ahora estoy usando System.getProperty ("line.separator"); No puedo usar BufferedWriter.newLine() ya que necesito completar la cadena completa antes de escribirla. – devnull

+0

Esto me salvó. Estoy trabajando con Wicket, y BufferedWriter.newLine() funcionaba localmente, pero no en tomcat ... Probé el \ r \ n y funcionó como un amuleto ... ¡Gracias! – eaglei22

7

Es por eso que debe usar BufferedWriter.newLine() en lugar de codificar los separadores de línea. Se ocupará de elegir la versión correcta para la plataforma en la que esté trabajando actualmente.

Cuestiones relacionadas