繁体   English   中英

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

[英]Output to text file, console empty - Java

BufferedReader br = new BufferedReader(new FileReader("shark-data.txt"));
String fileRead = br.readLine();
PrintStream out = new PrintStream(new FileOutputStream("results.txt"));
System.setOut(out);

代码有效,它会创建一个新的文本文件,并将我从控制台输出的内容放入文本文件中。 问题是我的控制台上没有任何内容。 我该如何解决?

您可以使用Apache commons-io中的TeeOutputStream将流拆分为两个: httpsTeeOutputStream 。 HTML

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

这将创建一个PrintStream写入原始System.out (即到控制台)和您的文件。

在Maven中,这里是你可以用来为你的项目添加commons-io的依赖片段:

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

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

然后你可以使用这个类如下

主要

        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

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

}

如果您的输出流将遍历调用其write方法的所有流,那么会发生什么

在执行System.setOut之前保存标准控制台,

PrintStream standard = System.out;

再次打印到控制台你应该使用下面切换到标准控制台,而不是你可以打开控制台。

System.setOut(标准); 的System.out.println( “你好!”);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM