我要将标准输出保存到文件中。为此,我使用了
System.setOut(new PrintStream(new File("output-file.txt")));
现在,控制台中没有输出。
try {
System.setOut(new PrintStream(new File("output-file.txt")));
} catch (Exception e) {
e.printStackTrace();
}
尽管我使用stdout填充文件,但是否有可能在控制台中显示stdout?
答案 0 :(得分:2)
您可以使用同时进行两次写入的PrintWriter
创建一个OutputStream
。
final OutputStream stdOut = System.out;
try {
System.setOut(new PrintStream(new OutputStream() {
private PrintStream ps = new PrintStream(new File("output-file.txt"));
@Override
public void write(int b) throws IOException {
ps.write(b);
stdOut.write(b);
}
@Override
public void flush() throws IOException {
super.flush();
ps.flush();
stdOut.flush();
}
@Override
public void close() throws IOException {
super.close();
ps.close();
// stdOut.close(); // Normally not done
}
}));
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Hello, world!");
答案 1 :(得分:1)
我从未尝试过,但是我想如果您将默认的Printstream子类化,则可以自己打印到控制台和文件。
类似:
class MyPrintStream extends printStream {
private PrintStream secondPrinter;
.....
@Override
public void println(Object content) {
super.println(content);
secondPrinter.println(content);
}
}
,也许这样称呼它:
System.out = new MyPrintStream(myFile, System.out);
答案 2 :(得分:0)
您不能使用系统OutputStream
写入2个源。它是一个静态变量,它一次只能有1个值。
但是,您可以尝试保存对控制台默认值OutputStream
的引用,然后将系统OutputStream
更改为自定义输出流,并使用自定义方法将两者写入。
答案 3 :(得分:0)
您可以创建PrintStream类的新子类,然后重写它的方法以写入第二个Stream,然后将其传递给System.out,因为您已经拥有一个。 进一步的阅读和示例实现:https://books.google.ch/books?id=lbnjAwAAQBAJ&lpg=PA326&ots=j7OUeuXzIa&dq=java%20duplicate%20printstream&pg=PA326#v=onepage&q=java%20duplicate%20printstream&f=false