很多时候的实际需求都不允许我们只是把结果输出到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)));