2011-12-12 29 views
11

我想使用Apache POI类将outlook .MSG文件解码为文本文件。Printwriter println:没有创建新行

一切工作正常,除了println方法PrintWriter:它不会创建一个新行。

它只是一个接一个地连接每个句子。下面摘录的代码的结果是

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

我试图在多台计算机代码:它的工作原理我本地的Tomcat安装目录(Windows机器),但未能在Solaris平台上的Tomcat或Weblogic的安装目录。我认为这与编码算法有关,所以我用PrintStream而不是Printwriter,表示编码ISO-8859-1,但都没有运气。

有什么想法?以下

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

你打印什么?控制台,日志文件,GUI应用程序中的文本框,html? – nos

+1

你是否试图在每行之间添加一行。每次你写一行后立即尝试'txtOut.println()'。 –

+0

除了实际输出的内容外,您期待的确切输出是什么? – Peter

回答

21

变化:

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

这涉及到如何PrintWriter.println()产生Line break取决于操作系统。对于unix系统是LF(\ n),对于Windows是CR + LF(\ r \ n)

通知我怎样添加了 “\ r \ n”,这意味着CR + LF和使用打印()代替的println()。这样生成的换行符不依赖于平台。

您还可以将以下方法添加到您的类中以避免重复,只调用此自定义println()而不是直接调用txtOut.print()。

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

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

这样,你只需要调用的println()方法

+7

而不是标签上的“\ r \ n”一个更安全的方法可能是定义和使用:public static String newline = System.getProperty(“line.separator”); – BlueVoid

+0

问题解决了将println更改为打印+ \ r \ n。非常感谢。 – nicBBB

相关问题