输出到文本文件,控制台为空-Java

输出到文本文件,控制台为空-Java,java,Java,代码工作,它创建一个新的文本文件,并将我从控制台的输出放入文本文件。问题是我的主机上没有显示任何内容。如何修复此问题?您可以使用Apache commons io中的TeeOutputStream将流一分为二: 这将创建一个打印流写入原始系统输出(即控制台)和您的文件 在Maven中,以下是可用于将commons io添加到项目中的依赖项片段: OutputStream fos = new FileOutputStream("results.txt"); OutputStream console

代码工作,它创建一个新的文本文件,并将我从控制台的输出放入文本文件。问题是我的主机上没有显示任何内容。如何修复此问题?

您可以使用Apache commons io中的
TeeOutputStream
将流一分为二:

这将创建一个
打印流
写入原始
系统输出
(即控制台)和您的文件

在Maven中,以下是可用于将commons io添加到项目中的依赖项片段:

OutputStream fos = new FileOutputStream("results.txt");
OutputStream consoleOut = System.out;
PrintStream newOut = new PrintStream(new TeeOutputStream(consoleOut, fos));
System.setOut(newOut);

公地io
公地io
2.6

首先,您必须创建一个从OutputStream接口继承的类,以实现适配器模式(我还不确定是否为适配器)

然后您可以使用下面这个类

MAIN

    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.6</version>
    </dependency>
TreeOutputStream

        PrintStream finalStream;
        TreeOutputStream tos;
        PrintStream out;

        out = new PrintStream("logs.txt");

        tos = new TreeOutputStream();
        tos.add(out);
        tos.add(System.out);
        finalStream = new PrintStream(tos);
        System.setOut(finalStream);
公共类TreeOutputStream扩展了OutputStream{
私有最终列表流;
公共空添加(输出流操作系统){
添加(操作系统);
}
公共无效删除(OutputStream os){
删除(操作系统);
}
公共树输出流(){
streams=新的ArrayList();
}
@凌驾
公共无效写入(int i)引发IOException{
streams.stream().forEach(strm->{
试一试{
标准写入(i);
}捕获(IOEX异常){
Logger.getLogger(TreeOutputStream.class.getName()).log(Level.SEVERE,null,ex);
}
});
}
}


在执行System.setOut之前,out stream将在调用其写入方法的所有流上循环发生什么情况 保存standart控制台

PrintStream标准=System.out

要再次打印到控制台,您应该使用下面的命令切换到standart控制台,然后再选择控制台

系统放样(标准);
System.out.println(“你好!”)

此解决方案的优点是没有链接到任何其他库
        PrintStream finalStream;
        TreeOutputStream tos;
        PrintStream out;

        out = new PrintStream("logs.txt");

        tos = new TreeOutputStream();
        tos.add(out);
        tos.add(System.out);
        finalStream = new PrintStream(tos);
        System.setOut(finalStream);
public class TreeOutputStream extends OutputStream{

private final List<OutputStream> streams;

public void add(OutputStream os){
    streams.add(os);
}

public void remove(OutputStream os){
    streams.remove(os);
}

public TreeOutputStream() {
    streams = new ArrayList<>();
}

@Override
public void write(int i) throws IOException {
    streams.stream().forEach(strm->{
        try {
            strm.write(i);
        } catch (IOException ex) {
            Logger.getLogger(TreeOutputStream.class.getName()).log(Level.SEVERE, null, ex);
        }
    });
}