java - java在文件和控制台中显示 stdout ( 使用 System.setOut(new PrintStream(new File("output file.txt") )

  显示原文与译文双语对照的内容
68 4

我想将stdout保存到文件中。为了这个我使用了
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个回答

91 5

可以以使用两个写入的OutputStream 创建一个 PrintWriter

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!");
原作者:
136 3

你不能使用系统的OutputStream 来写入 2个源。它是一个 static 变量,而且它每次只能有个值。

可以以尝试保存对控制台的默认 OutputStream,然后将系统 OutputStream 更改为自定义输出流并用自定义方法写入。

原作者:
...