System中的out,error都是final類型的,不能做改動。但通過setOut()可以設定新的輸出資料流,從而實現寫日誌的功能。
import java.io.PrintStream; import java.io.FileNotFoundException; public class RedirectOutputStream { public static void main(String arg[]){ try{ PrintStream out = System.out; //保留原輸出資料流 PrintStream ps = new PrintStream("./log.txt");//建立檔案輸出資料流 System.setOut(ps); //設定使用新的輸出資料流 int age = 18; System.out.println("年齡變數成功定義,初始值為:18"); String sex = "女"; System.out.println("性別變數成功定義,初始值為:女"); String info = "這個是"+ sex +"孩子,應該有"+age+"歲"; System.out.println("整合兩個變數為info字串變數,其結果為"+info); System.setOut(out); //恢複原有輸出資料流 System.out.println("程式運行完畢,請查看記錄檔。"); } catch(FileNotFoundException e){ e.printStackTrace();} } }
日誌如下:
年齡變數成功定義,初始值為:18
性別變數成功定義,初始值為:女
整合兩個變數為info字串變數,其結果為這個是女孩子,應該有18歲
總結:
該方法中儲存了System類的out成員變數為臨時變數,然後建立新的檔案輸出資料流,並把這個輸出資料流設定為System類的新是輸出資料流。並將持續的調試資訊輸出到日誌中去。主要方法:
1. setOut()方法: 重新分配System類的標準輸出資料流。
2. setErr()方法: 重新分配System類的標準錯誤輸出資料流。
3. setIn()方法: 重新分配System類的標準輸入資料流。