2011-04-29 105 views
5

大概這個線程是duplicate,但有人可以指導?我想同時將java程序輸出寫入控制檯文件。我知道,我可以給輸出,這段代碼Java控制檯輸出 - 文件和控制檯BOTH

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: 不尋找一個選項,我在文件中輸出並在不同的線程顯示控制檯。

+2

應該看看[log4j的(HTTP: //logging.apache.org/log4j/1.2/manual.html) – mre 2011-04-29 22:05:20

回答

5

Apache Commons IO查找TeeOutputStream

+1

該頁面沒有'TeeOutputStream'。 – modulitos 2014-04-29 06:29:11

+0

已修復Apache Commons IO JavaDoc鏈接。 – kervin 2015-01-14 03:19:10

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 

然後,一切都打印到標準輸出去這兩個文件和控制檯。

0

當你運行你的程序

的java {標誌的JVM} {類名參數類}> output.txt的2> error.txt