2010-05-24 119 views
7

據我所知,out和err是同一類PrintStream。有人可以告訴我他們有什麼不同嗎?他們如何改變他們的行爲?system.out與system.err之間的區別

+0

http://en.wikipedia.org/wiki/Standard_streams – stacker 2010-05-24 13:18:46

回答

3

它們分別轉到系統stdout和stderr流。在大多數操作系統中,這些是不同的,可以發送到不同的地方。例如,如果你的程序的輸出被另一個程序解析,這可能是有用的 - 如果它需要報告錯誤,stderr通常會是更好的地方,因爲你可能已經設置好了它以引起人們的注意。

12

差異並不明顯,因爲默認情況下,在大多數操作系統中,它們被寫入控制檯(同一文件,控制檯也是文件)。但是,您可以將System.out寫入文件,並將System.err寫入控制檯(顯示器) - 這只是一種情況。

寫發出兩個System.out和System.err的消息的程序,試試這個:

java MyProgram > out.txt 2> err.txt # On a *NIX. 

System.out消息會去到out.txt和System.err消息會去err.txt。要記住的基本點是將System.out和System.err視爲文件流(這就是它們),而不是在監視器上輸出的機制,這是我認爲的初學者。

+3

+1爲重定向示例。 – 2010-05-25 03:06:28

2

他們有相同的行爲。但首先(out)是對標準輸出流的引用(默認情況下它是一個控制檯)。第二個(err)是對標準錯誤流的引用(默認情況下它也是一個控制檯)。

但是,如果你想,你可以改變一個引用,或者你可以添加一個包裝器/過濾器到他們每個人。

我的IDE,例如,示出了從紅色err流輸出。

0

的System.out將輸出發送到標準輸出流。 System.err將輸出發送到標準錯誤流。 默認情況下這兩個寫入控制檯。

不過好處是,這兩個流可以被重定向,所以你可以有System.out的輸出重定向到正常的日誌文件,你可以有重定向到錯誤日誌的輸出System.err的。

相關問題