Apache POIクラスを使用して、Outlookの.MSGファイルをテキストファイルにデコードしようとしています。
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.");
}
}
以下を変更します。
txtOut.print("De: "+displayFrom + "\r\n");
txtOut.print("Para: "+displayTo + "\r\n");
これは、オペレーティングシステムに応じて PrintWriter.println() が 改行 を生成する方法に関連しています。 UNIXシステムの場合はLF(\ n)、Windowsの場合はCR + LF(\ r\n)。
「\ r\n」を追加した方法に注目してください。これは、CR + LFそしてprintln()の代わりにprint()を使用しました。このように、生成される改行はプラットフォームに依存しません。
重複を避けるために次のメソッドをクラスに追加して、txtOut.print()を直接呼び出す代わりに、このカスタムprintln()を呼び出すこともできます。
private static final String LINE_SEPARATOR = "\r\n";
public void println(String str) {
txtOut.print(str + LINE_SEPARATOR);
}
このようにして、println()メソッドを呼び出すだけです。