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