这个主题可能是duplicate,但有人可以指导吗?我想同时将java程序输出写入控制台和文件。我知道我可以使用这段代码将输出发送到控制台
PrintStream orgStdout = null;
PrintStream fileStdout = null;
orgStdout = System.out;
try {
fileStdout = new PrintStream(new FileOutputStream("C:\\testlogger.txt"));
System.setOut(fileStdout);
System.out.println("==============");
for (int i = 0; i < 10; i++){
System.out.println("" + i);
}
System.out.println("==============");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
但如何在控制台和文件上保持输出?
P.S: 不寻找我在文件中输出并在不同线程中显示控制台的选项。
答案 0 :(得分:5)
从Apache Commons IO查找TeeOutputStream
。
答案 1 :(得分:2)
不要调用System.setOut(),只打两次调用。它不是很优雅,但你可以制作一个输出到两者的方法。
PrintStream orgStdout = null;
PrintStream fileStdout = null;
orgStdout = System.out;
try {
fileStdout = new PrintStream(new FileOutputStream("C:\\testlogger.txt"));
System.out.println("==============");
for (int i = 0; i < 10; i++){
System.out.println("" + i);
fileStdout.println("" + i);
}
System.out.println("==============");
fileStdout.println("" + i);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
如果您在unix框上运行,只要所有内容都打印到stdout,您也可以使用tee
命令。你可以这样运行你的程序:
java MyClass | tee testlogger.txt
然后打印到stdout的所有内容都会转到文件和控制台。
答案 2 :(得分:0)
运行程序时
java {JVM的标志} ClassName {类的参数}&gt; output.txt 2&gt; error.txt 强>