簡體   English   中英

Printwriter println:沒有創建新行

[英]Printwriter println: no new line created

我正在嘗試使用Apache POI類將outlook .MSG文件解碼為文本文件。

一切正常,除了PrintWriterprintln方法:它不會創建一個新的行。

它只是一個接一個地直接連接每個句子。 下面的代碼段的結果是

"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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM