2011-12-12 10 views
11

Estoy intentando decodificar un archivo .MSG de Outlook en un archivo de texto, utilizando las clases de puntos de interés de Apache.printliter println: no se creó una nueva línea

Todo funciona bien, excepto en el método println de PrintWriter: no crea una nueva línea.

Simplemente concatena cada frase directamente una tras otra. El resultado del código siguiente fragmento es

 
"De: textPara: " iso 
"De: " 
"Para: " 

Probé el código en varias máquinas: funciona en mi Tomcat instalación local (máquina de Windows), pero falla en un gato o instalación Weblogic en una plataforma Solaris. Pensé que tenía algo que ver con el algoritmo de codificación, así que usé PrintStream en lugar de Printwriter, lo que indica la codificación ISO-8859-1, pero tampoco tuve suerte.

¿Alguna idea?

try { 
     byte [] msgByte = Base64.decodeBase64(msgBase64); 

     InputStream inputMsg = new ByteArrayInputStream(msgByte); 
     msg = new MAPIMessage(inputMsg); 

     /* 1. Transform MSG to TXT. */ 
     try { 
      txtOut = new PrintWriter(outputMsg); 
      try { 
       String displayFrom = msg.getDisplayFrom(); 
       txtOut.println("De: "+displayFrom); 
      } catch (ChunkNotFoundException e) { 
       _logger.info("Error extrayendo displayFrom: "+e); 
      } 
      try { 
       String displayTo = msg.getDisplayTo(); 
       txtOut.println("Para: "+displayTo); 
      } catch (ChunkNotFoundException e) { 
       _logger.info("Error extrayendo displayTo: "+e); 
      } 

     } finally { 
     if(txtOut != null) { 
      txtOut.close();} 
     else { 
      _logger.error("No se ha podido parsear el mensaje."); 
     } 

     } 
+2

¿qué está imprimiendo? Una consola, un archivo de registro, un cuadro de texto en una aplicación GUI, html? – nos

+1

¿Está tratando de agregar una línea adicional entre cada línea? Pruebe 'txtOut.println()' justo después de cada vez que escriba una línea. –

+0

¿Cuál es el resultado exacto que espera, además de lo que realmente se genera? – Peter

Respuesta

21

cambiar los siguientes:

txtOut.print("De: "+displayFrom + "\r\n"); 
txtOut.print("Para: "+displayTo + "\r\n"); 

Esto está relacionado con la forma en PrintWriter.println() genera la Line break dependiendo del sistema operativo. Para sistemas Unix es LF (\ n), para Windows es CR + LF (\ r \ n).

Aviso cómo he añadido el "\ r \ n", que significa CR + LF y se utiliza de impresión() en lugar deprintln(). De esta forma, el salto de línea generado no depende de la plataforma.

También puede agregar el siguiente método a su clase para evitar la duplicidad y simplemente llame a este println personalizado() en lugar de llamar directamente a txtOut.print().

private static final String LINE_SEPARATOR = "\r\n"; 

public void println(String str) { 
    txtOut.print(str + LINE_SEPARATOR); 
} 

De esta manera usted acaba de llamar println() método.

+7

En lugar de etiquetar en "\ r \ n", un método más seguro podría ser definir y usar: public static String newline = System.getProperty ("line.separator"); – BlueVoid

+0

Problema resuelto cambiando println para imprimir + \ r \ n. Muchas gracias. – nicBBB

Cuestiones relacionadas