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

 

 

 

posted @   FlameRen  阅读(3745)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示