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

杜老師說 2022-01-07 10:21:03 阅读数:347

java io system.in system.out system.err

原文鏈接 作者: Jakob Jenkov 譯者: 李璟([email protected])

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把數據輸出到了文件中。

原創文章,轉載請注明: 轉載自並發編程網 – ifeve.com本文鏈接地址: Java IO: System.in, System.out, System.err

FavoriteLoading添加本文到我的收藏
版权声明:本文为[杜老師說]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201071021026992.html