(JAVA)從零開始之--打印流PrintStream記錄日志文件


這里的記錄日志是利用打印流來實現的。

文本信息中的內容為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寫入到文件中呢?那么得將第三行代碼改為

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("酒香逢")); 

上面這段代碼得到的結果為:

可見不管什么數據類型,都會轉換為字符串,甚至是對象也不例外。

這里再說一下學習java時少不了用到的一句代碼:System.out.println();代碼中的out,為System類中的一個PrintStream對象,稱之為標准輸出流對象。標准輸出流對象會將數據打印到控制台上。查閱API可知有如下方法,

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條的,日志信息記錄保存目的達成!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM