Java控制台输出 - 文件和控制台BOTH

时间:2011-04-29 22:00:13

标签: java core outputstream

这个主题可能是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: 不寻找我在文件中输出并在不同线程中显示控制台的选项。

3 个答案:

答案 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