7

可能这个线程是重复的,但有人可以指导吗?我想同时将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();
    }

但是如何在控制台和文件上保持输出?

PS:没有寻找我在文件中输出并在不同线程中显示控制台的选项。

4

3 回答 3

6

TeeOutputStreamApache Commons IO中查找。

于 2011-04-29T22:08:10.643 回答
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 机器上运行,tee只要将所有内容都打印到标准输出,您也可以使用该命令。你会像这样运行你的程序:

java MyClass | tee testlogger.txt

然后打印到标准输出的所有内容都进入文件和控制台。

于 2011-04-29T22:08:48.053 回答
0

当你运行你的程序时

java {JVM 的标志} ClassName {你的类的参数} > output.txt 2> error.txt

于 2017-01-31T08:23:48.150 回答