閱讀536 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Java IO: System.in, System.out, System.err

System.in, System.out, System.err這3個流同樣是常見的數據來源和數據流目的地。使用最多的可能是在控製台程序裏利用System.out將輸出打印到控製台上。

JVM啟動的時候通過Java運行時初始化這3個流,所以你不需要初始化它們(盡管你可以在運行時替換掉它們)。

System.in

System.in是一個典型的連接控製台程序和鍵盤輸入的InputStream流。通常當數據通過命令行參數或者配置文件傳遞給命令行Java程序的時候,System.in並不是很常用。圖形界麵程序通過界麵傳遞參數給程序,這是一塊單獨的Java IO輸入機製。

System.out

System.out是一個PrintStream流。System.out一般會把你寫到其中的數據輸出到控製台上。System.out通常僅用在類似命令行工具的控製台程序上。System.out也經常用於打印程序的調試信息(盡管它可能並不是獲取程序調試信息的最佳方式)。

System.err

System.err是一個PrintStream流。System.err與System.out的運行方式類似,但它更多的是用於打印錯誤文本。一些類似Eclipse的程序,為了讓錯誤信息更加顯眼,會將錯誤信息以紅色文本的形式通過System.err輸出到控製台上。

System.out和System.err的簡單例子:

這是一個System.out和System.err結合使用的簡單示例:

try {

    InputStream input = new FileInputStream("c:\\data\\...");

    System.out.println("File opened...");

} catch (IOException e) {

    System.err.println("File opening failed:");

    e.printStackTrace();

}

替換係統流

盡管System.in, System.out, System.err這3個流是java.lang.System類中的靜態成員(譯者注:這3個變量均為final static常量),並且已經預先在JVM啟動的時候初始化完成,你依然可以更改它們。隻需要把一個新的InputStream設置給System.in或者一個新的OutputStream設置給System.out或者System.err,之後的數據都將會在新的流中進行讀取、寫入。

可以使用System.setIn(), System.setOut(), System.setErr()方法設置新的係統流(譯者注:這三個方法均為靜態方法,內部調用了本地native方法重新設置係統流)。例子如下:

OutputStream output = new FileOutputStream("c:\\data\\system.out.txt");

PrintStream printOut = new PrintStream(output);

System.setOut(printOut);

現在所有的System.out都將重定向到”c:\\data\\system.out.txt”文件中。請記住,務必在JVM關閉之前衝刷System.out(譯者注:調用flush()),確保System.out把數據輸出到了文件中。

最後更新:2017-05-23 14:32:44

  上一篇:go  深度解析Java8 – AbstractQueuedSynchronizer的實現分析(下)
  下一篇:go  linux 批量更改shell