很多時候的實際需求都不允許我們只是把結果輸出到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)));