将java console的输出写入文件

简介:

 FileOutputStream bos = new FileOutputStream("output.txt");

  System.setOut(new PrintStream(bos));
  System.out.println("output to output.txt");
这样,console的输出全部写入文件output.txt,但是控制台不会有输出信息。
如果希望控制台也有输出:
新建一个继承java.io.OutputStream的类,实现多输出方式
import java.io.IOException;
import java.io.OutputStream;
public class MultiOutputStream extends OutputStream {
 OutputStream outputStream1,outputStream2;
 public MultiOutputStream(OutputStream stream1, OutputStream stream2 ) 
 throws IOException{
  outputStream1 = stream1;
  outputStream2 = stream2;
 }
 @Override
 public void write(int b) throws IOException {
  // TODO Auto-generated method stub
  outputStream1.write(b);
  outputStream2.write(b);
 }
}
再调用该类的对象
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
class Out2File {
 /**
  * @param args
  * @throws IOException 
  */
 public static void main(String[] args) throws IOException {
  // TODO Auto-generated method stub
  
  PrintStream oldPrintStream = System.out;
  FileOutputStream bos = new FileOutputStream("output.txt");
  MultiOutputStream multi = new MultiOutputStream(new PrintStream(bos),oldPrintStream);
  System.setOut(new PrintStream(multi));
  System.out.println("jjjjjjjjjjj");
  
 }
}
这样console和文件中都会有输出。
 
参考材料:
1、要解决console和文件同时输出的问题还需要自己实现一个OutputStream,让OutputStream能同时写入多个输出.
       首先继承java.io.OutputStream,然后实现public abstract void write(int b) throws IOException; 并且覆写java.io.OutputStream中的其他的方法,具体的实现方式按照自己的需求来做,这里就不做出具体的实现了.
       通过实现自己实现OutputStream之后,
      在
           PrintStream printStreamOut = new PrintStream(outputStreamOut);
           PrintStream printStreamErr = new PrintStream(outputStreamErr);
      中分别把outputStreamOut和outputStreamErr对象换成自己实现的OutputStream对象,这样就可以实现在一个OutputStream对象中进行多个输出操作.
      按照以上的思路进行的实现,可以完全把控制台的所有的输出写入到日志文件中,包括System.out.println这样的输出.
 
 
2.Re:Java控制台的内容如何输出到文件? [Re: GlennLi] Copy to clipboard 
Posted by: zcjl
Posted on: 2006-03-13 14:18
对于标题的问题,可以参考下面这段代码:
        PrintStream oldPrintStream = System.out;        ByteArrayOutputStream bos = new ByteArrayOutputStream();        System.setOut(new PrintStream(bos));        System.out.println("this is the text to output");        System.setOut(oldPrintStream);        System.out.println(bos.toString());

有几点需要注意:
1.保留原始的System.out这个对象(上面的oldPrintStream),在对console输出内容转移完成后记得恢复。
2.这里的ByteArrayOutputStream bos = new ByteArrayOutputStream();可以替换为任何OutputStream对象,比如你这里要输出到文本文件,就可以使用FileOutputStream
3.要输出为.doc等格式,则需要对应格式的处理工具支持(如:word和excel文档可以使用poi,pdf可以使用itext等),然后使用相应的outputstream对象替换System.out,并把这些outputstream作为数据源创建对应格式的文件  



本文转自 dogegg250 51CTO博客,原文链接:http://blog.51cto.com/jianshusoft/769913,如需转载请自行联系原作者
相关文章
|
12天前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之在使用MaxCompute的Java SDK创建函数时,出现找不到文件资源的情况,是BUG吗
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
26 0
|
1月前
|
存储 缓存 安全
Java 中 IO 流、File文件
Java 中 IO 流、File文件
|
2月前
|
前端开发 Java
Java压缩20M文件非常厉害
Java压缩20M文件非常厉害
27 1
|
2月前
|
Java BI API
Java如何实现文件批量导入导出(兼容xls,xlsx)
Java如何实现文件批量导入导出(兼容xls,xlsx)
49 0
|
2月前
|
Java
有关Java发送邮件信息(支持附件、html文件模板发送)
有关Java发送邮件信息(支持附件、html文件模板发送)
47 1
|
17天前
|
Java Unix Windows
|
21天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
55 3
|
2天前
|
Java 开发者
Java一分钟之-Java IO流:文件读写基础
【5月更文挑战第10天】本文介绍了Java IO流在文件读写中的应用,包括`FileInputStream`和`FileOutputStream`用于字节流操作,`BufferedReader`和`PrintWriter`用于字符流。通过代码示例展示了如何读取和写入文件,强调了常见问题如未关闭流、文件路径、编码、权限和异常处理,并提供了追加写入与读取的示例。理解这些基础知识和注意事项能帮助开发者编写更可靠的程序。
8 0
|
3天前
|
Java
JDK环境下利用记事本对java文件进行运行编译
JDK环境下利用记事本对java文件进行运行编译
10 0
|
5天前
|
Arthas 安全 Java
java服务报错 FileNotFoundException:打开的文件过多
java服务报错 FileNotFoundException:打开的文件过多
14 0