[英]Printwriter println: no new line created
我正在尝试使用Apache POI类将outlook .MSG文件解码为文本文件。
一切正常,除了PrintWriter
的println
方法:它不会创建一个新的行。
它只是一个接一个地直接连接每个句子。 下面的代码段的结果是
"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并使用print()而不是println() 。 这样生成的换行符不依赖于平台。
您还可以向类中添加以下方法以避免重复,只需调用此自定义println()而不是直接调用txtOut.print()。
private static final String LINE_SEPARATOR = "\r\n";
public void println(String str) {
txtOut.print(str + LINE_SEPARATOR);
}
这样你就可以调用println()方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.