Printwriter println: новая строка не создана
Я пытаюсь декодировать файл Outlook.MSG в текстовый файл, используя классы POI Apache.
Все работает отлично, за исключением метода println
PrintWriter
: он не создает новую строку.
Он просто конкатенирует каждое предложение непосредственно один за другим. Ниже приведен фрагмент кода
"De: textPara: " iso
"De: "
"Para: "
Я пробовал код на нескольких машинах: он работает на моей локальной установке tomcat (машина Windows), но не работает на установке tomcat или Weblogic на платформе Solaris. Я думал, что это как-то связано с алгоритмом кодирования, поэтому я использовал 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.");
}
}
Ответы
Ответ 1
Измените следующее:
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 и используется print() вместо Println(). Таким образом, генерируемый разрыв строки не зависит от платформы.
Вы также можете добавить следующий класс в свой класс, чтобы избежать двуличия и просто вызвать этот пользовательский println() вместо прямого вызова txtOut.print().
private static final String LINE_SEPARATOR = "\r\n";
public void println(String str) {
txtOut.print(str + LINE_SEPARATOR);
}
Таким образом вы просто вызываете метод println().