Java知識積累——同時輸出到控制台和指定文件,或直接輸出到指定文件


很多時候的實際需求都不允許我們只是把結果輸出到console就可以了,那么怎么把程序運行結果輸出到指定文件,以及怎么能同時讓其輸出到指定文件和console呢?

通過網上搜索過來人的文章,找到了如下解決方法,感謝前人的分享~

1.首先我們需要自己編寫一個類,並且繼承OutputStream類,重寫其write(int b)方法。這個類主要實現創建兩條輸出流。

 1 import java.io.IOException;
 2 import java.io.OutputStream;
 3 
 4 public class MultiOutputStream extends OutputStream{
 5     
 6     OutputStream output1;
 7     OutputStream output2;
 8     
 9     public MultiOutputStream(OutputStream output1,OutputStream output2){
10         this.output1 = output1;
11         this.output2 = output2;
12     }
13     
14     @Override
15     public void write(int b) throws IOException {
16         // TODO Auto-generated method stub
17         output1.write(b);
18         output2.write(b);
19     }
20     
21 }

 

2.主程序中進行配置

 1     public static void main() throws IOException{  
 2         FileOutputStream propFile = null;
 3         MultiOutputStream multi = null;
 4         
 5         try {
 6             propFile = new FileOutputStream("src/applicationContext.properties");
 7             //設置同時輸出到控制台和prop文件
 8             multi = new MultiOutputStream(new PrintStream(propFile),System.out);
 9             System.setOut(new PrintStream(multi));
10             
11             System.out.println("輸入任何文字均可~~")
12         } catch (Exception e) {
13             e.printStackTrace();
14         } finally{
15             multi.close();
16             input.close();
17             propFile.close();
18         }
19     } 

 

程序進行到第九行后,但凡是原來只輸出到控制台的信息都會同時輸出到propFile所指向的文件當中。

當設置了雙輸出后,如何將輸出流重新只指向控制台呢?有兩種方法,其一是在開始setOut時,先記錄那時的輸出流指向,以供后續調用。

 

 

PrintStream console = System.out;

System.setOut(new PrintStream(multi));//變成了雙輸出

System.setOut(console);//又設置成了之前只輸出到控制台的模式

 

其二的方法不是通過之前記錄,而是直接重定向到標准輸出。

//通用重定向輸出流到console,不用之前記錄
System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));

 

 

 


免責聲明!

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



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