zoukankan      html  css  js  c++  java
  • 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)));
    PS: 我存在过,我遇见过,我失败过。 有些路,明明有坑却从没人放警示牌。有些事,明明是错的却没人去管。有些话,明明应该告诉后来人却没人去说。 既然没人做,那就我来吧。希望我曾经历过的挫折不再重现于后来人。希望传承能够不是只挂在嘴边。希望人模人样的“人”能够真正做人。
  • 相关阅读:
    Java Json 数据下划线与驼峰格式进行相互转换
    php 将数组转换网址URL参数
    Swagger2常用注解及其说明 (转)
    Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念(转)
    bootstrap.css.map 404
    Git发生SSL certificate problem: certificate ha错误的解决方法
    防火墙禁ping:虚拟机ping不通主机,但主机可以ping虚拟机
    PhpStorm本地断点调试
    Java语言中姐种遍历List的方法总结
    Ubuntu18.04安装mysql5.7
  • 原文地址:https://www.cnblogs.com/FlameRen/p/2948353.html
Copyright © 2011-2022 走看看