歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

Copyright © Linux教程網 All Rights Reserved