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)));

 

 

 

你可能感兴趣的:(java)