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

时间:2017-11-26 19:01:05

标签: 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);

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

3 个答案:

答案 0 :(得分:2)

您可以使用Apache commons-io中的TeeOutputStream将流分成两部分:https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/output/TeeOutputStream.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>

答案 1 :(得分:1)

首先,您必须创建一个从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);
        }
    });
}

}

您的输出流将在所有调用其写入方法的流上循环

答案 2 :(得分:1)

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

PrintStream standard = System.out;

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

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