想要查看此教程的目錄請點(diǎn)擊:Java IO教程目錄貼地址
System.in,System.out和System.err這三個(gè)流也是常見的數(shù)據(jù)源或數(shù)據(jù)目的地。最常用的可能就是程序利用System.out將數(shù)據(jù)輸出到控制臺了。
這三個(gè)流是在jvm啟動(dòng)的時(shí)候被Java運(yùn)行時(shí)環(huán)境初始化的悬襟,所以你并不必去實(shí)例化它們爽待。(雖然你可以在運(yùn)行時(shí)改變他們)
System.in
System.in是一個(gè)InputStream,它是控制臺程序的典型的接受鍵盤輸入的流帐偎。由于數(shù)據(jù)經(jīng)常通過配置文件或命令行參數(shù)傳遞給Java程序,所以不會(huì)經(jīng)常用它蛔屹。在GUI應(yīng)用中削樊,程序的輸入是GUI提供的。這是一個(gè)來自Java IO中獨(dú)立的input機(jī)制兔毒。
System.out
System.out是一個(gè)PrintStream漫贞。它經(jīng)常把你寫入的數(shù)據(jù)輸出到控制臺。它經(jīng)常用在命令行工具中育叁。在debug模式打印報(bào)告中也會(huì)經(jīng)常用到它(雖然它不是最好的往事去輸出debug信息)
System.err
System.err是一個(gè)PrintStream迅脐。它的作用有些像System.out,不同的是它一般用來打印錯(cuò)誤日志豪嗽。一些程序(比如Eclipse)會(huì)用紅色字體來顯示System.err的輸出日志谴蔑。
簡單System.out + System.err 例子
下面是一個(gè)簡單的例子來使用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的流
即使System的三個(gè)流是java.lang.System的三個(gè)靜態(tài)成員,并且在虛擬機(jī)啟動(dòng)的時(shí)候就已經(jīng)初始化好昵骤,但是你也可以用一個(gè)流來改變它們树碱。僅僅是給System.in或System.out創(chuàng)建一個(gè)新的InputStream,進(jìn)而所有的數(shù)據(jù)都可以被讀寫到新的流中变秦。
使用System.setIn()成榜、System.setOut()或System.setErr()其中一個(gè)方法,創(chuàng)建一個(gè)新的System流,舉例說明:
OutputStream output = new FileOutputStream("c:\\data\\system.out.txt");
PrintStream printOut = new PrintStream(output);
System.setOut(printOut);
現(xiàn)在所有寫入到System.out的數(shù)據(jù)都可以被定向到目錄c:\data\system.out.txt了蹦玫。但是請記住赎婚,你需要去確定在JVM關(guān)閉之前要刷新System.out和關(guān)閉這個(gè)文件刘绣,確保所有的數(shù)據(jù)已經(jīng)被刷新到文件中了。