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: 我存在过,我遇见过,我失败过。 有些路,明明有坑却从没人放警示牌。有些事,明明是错的却没人去管。有些话,明明应该告诉后来人却没人去说。 既然没人做,那就我来吧。希望我曾经历过的挫折不再重现于后来人。希望传承能够不是只挂在嘴边。希望人模人样的“人”能够真正做人。
  • 相关阅读:
    集训笔记——dp继续
    集训笔记——各种dp(dp杂谈)
    集训笔记——dp
    洛谷P3197 [HNOI2008]越狱 题解
    集训笔记——杂题选讲(图论,dp)
    集训笔记——杂题选讲(带数学推导的递推、递归和dp,卡特兰数)
    滑动窗口+二分--P3957 跳房子
    差分+二分答案--P1083 借教室
    逆序对--P1966 火柴排队
    数位dp--P2657 [SCOI2009] windy 数
  • 原文地址:https://www.cnblogs.com/FlameRen/p/2948353.html
Copyright © 2011-2022 走看看