2011-12-12 11 views
11

Apache POIクラスを使用して、Outlookの.MSGファイルをテキストファイルにデコードしようとしています。Printwriter println:新しい行が作成されない

のメソッドを除いてすべて正常に動作します。新しい行を作成しません。

すべての文を1つずつ順番に連結します。それは私の地元のTomcatのインスタレーション(Windowsマシン)上で動作しますが、Solarisプラットフォーム上のTomcatまたはWebLogicのインスタレーションに失敗します。以下のコードスニペットの結果は、私はいくつかのマシン上のコードを試してみました

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

です。私はそれがエンコーディングアルゴリズムと関係があると思ったので、Printwriterの代わりにPrintStreamを使用しました。これはエンコーディング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システムのWindows用LF(\ n)がは、CR + LF(\ Rを\ n)です。私はCR + LFを意味する "\ R \ N" を添加しプリント()を使用する方法

注意代わりのprintln()。このように生成された改行はプラットフォームに依存しません。

あなたは直接txtOut.printを呼び出すのではなく)も二枚舌を避けるために、あなたのクラスに次のメソッドを追加して、ちょうどこのカスタムのprintlnを(呼び出すことができます()。あなただけのprintln()メソッドを呼び出し

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

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

この方法です。

+7

"\ r \ n"でタグ付けするのではなく、より安全なメソッドを定義して使用することができます:public static String newline = System.getProperty( "line.separator"); – BlueVoid

+0

printlnをprint +に変更して問題を解決しました。\ r \ nどうもありがとう。 – nicBBB

関連する問題