這裏的記錄日誌是利用打印流來實現的。java
文本信息中的內容爲String類型。而像文件中寫入數據,咱們常常用到的還有文件輸出流對象FileOutputStream.數組
1 File file = new File("F:\\a.txt"); 2 FileOutputStream outputStream = new FileOutputStream(file,true);//第二個參數爲追加文本
3 outputStream.write(97);
上面的代碼執行完以後,a.txt中的內容存的是a,由於write方法接收的爲byte類型的數據,97對應的ASCII碼爲a。學習
假設我就想將97寫入到文件中呢?那麼得將第三行代碼改成spa
1 outputStream.write("97".getBytes());//先將97做爲字符串再轉換爲byte數組
而PrintStream得出現,是的咱們寫數據入文件變得十分方便,你傳入的是什麼,就會給你寫入什麼數據。緣由是他內部幫咱們轉換活了日誌
1 File file = new File("F:\\a.txt"); 2 PrintStream printStream = new PrintStream(file); 3 printStream.println(97); 4 printStream.println('a'); 5 printStream.println("hello world"); 6 printStream.println(true); 7 printStream.println(3.14); 8 printStream.println(new Student("酒香逢"));
上面這段代碼獲得的結果爲:code
可見無論什麼數據類型,都會轉換爲字符串,甚至是對象也不例外。對象
這裏再說一下學習java時少不了用到的一句代碼:System.out.println();代碼中的out,爲System類中的一個PrintStream對象,稱之爲標準輸出流對象。標準輸出流對象會將數據打印到控制檯上。查閱API可知有以下方法,blog
static void setOut(PrintStream out) //從新分配「標準」輸出流。接口
能夠從新指定輸出流對象,即將System.out.println();的輸出內容打印到咱們想打印到的地方。字符串
1 File file = new File("F:\\a.txt"); 2 PrintStream printStream = new PrintStream(file); 3 System.setOut(printStream); 4 System.out.println("打印到F:\\a.txt中");
這時候內容回寫入到文件a.txt中去,而不是打印在控制檯中。
最後迴歸本文重點,日誌信息的保存。
假設有代碼:
1 try{ 2 int n = 5/0; 3 }catch(Exception e){ 4 e.printStackTrace(); 5 }
執行結果會拋出咱們想要的錯誤日誌信息。
java.lang.ArithmeticException: / by zero
at log.DemoLog.main(DemoLog.java:26)
這時候想將日誌信息保存起來怎麼辦呢?
看到Exception類中的這3個重載方法,咱們不可貴知,只要給他指定一個打印輸出流對象當中,便可將日誌信息保存到咱們想要的地方。
1 File file = new File("F:\\a.log"); 2 PrintStream printStream = new PrintStream(file); 3 try{ 4 int n = 5/0;//除數爲零異常
5 }catch(Exception e){ 6 e.printStackTrace(printStream); 7 }
上面這段代碼執行重複執行屢次,
可是記錄的日誌信息永遠只會記錄一條。這明顯不是咱們想獲得的,日誌信息,總不能只記錄一條吧?那麼它存在又有什麼用?
其實,追加文本信息的決定者不是e.printStackTrace(printStream);方法,關鍵點在於流對象,
可見打印流對象是存在一個OutputStream接口做爲參數的傳入對象。既然是接口,那麼就沒法new出OutputStream的對象了,能夠用他的子類FileOutputStream對象做爲參數傳入。而且,FileOutputStream流是能夠追加的,
new FileOutputStream(file,true);//第二個參數爲追加文本
此時將其做爲參數傳入,PrintStream流天然也就能夠追加內容了。
1 File file = new File("F:\\a.log"); 2 PrintStream printStream = new PrintStream(new FileOutputStream(file,true),true); 3 try{ 4 int n = 5/0;//除數爲零異常
5 }catch(Exception e){ 6 e.printStackTrace(printStream); 7 }
將代碼執行3次後:
能夠看到日誌信息是保存有3條的,日誌信息記錄保存目的達成!