2012-10-17 81 views
2

試圖改變System.out中的編碼,我創建了一個PrintWriter與 的Java:checkError()要用到PrintWriter(OutputStreamWriter(System.out中))

PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out, ENCODING));
所以

out.format("some text");

工作的罰款作爲編碼。但是當輸出流關閉時,例如

out.checkError()
未返回真 。通過Unix的'頭'命令。

我發現PrintStream的提供與編碼

PrintStream out = new PrintStream(System.out, true, ENCODING);

和checkError一個構造函數() 此類工作的罰款。

我懷疑PrintWriter的情況是一個錯誤,還是我錯過了什麼?

+0

預期結果是什麼?你想達到什麼目的? – KarolDepka

+0

輸出流沒有被'head'命令關閉。只有你可以關閉它。 – EJP

回答

0

不,我也覺得這是不是一個錯誤,但在checkError()一個微妙的不同定義/設計根源及其基本類:

  • PrintWriter.checkError()

    public boolean checkError() 刷新流如果沒有關閉並檢查其錯誤狀態。 返回:true如果打印流在底層輸出流或格式轉換過程中遇到錯誤

  • 和從PrintStream.checkError()

    public boolean checkError()刷新該流並檢查其錯誤狀態。當基礎輸出流引發除InterruptedIOException之外的IOException以及調用setError方法時,內部錯誤狀態設置爲true。如果對基礎輸出流的操作拋出InterruptedIOException,則PrintStream通過執行以下操作將異常轉換回中斷: Thread.currentThread().interrupt(); 或等效項。 返回: true當且僅當此流遇到IOException而不是InterruptedIOExceptionsetError方法已被調用。

正如你看到的PrintStreamcheckError()定義是嚴格的一個,而失敗也許還是值得調查。

然後很大程度上取決於您的實際輸出控制檯(及其支持的編碼)。在Windows中,你需要

chcp 65001 

..to使(例如)UTF-8輸出(https://stackoverflow.com/a/388500/592355https://stackoverflow.com/a/10148976/592355,...)