是否有可能在Windows批处理或Java中写一个Tee?

我有一个在Windows 7控制台中运行的Java程序:

java -classpath classfolder mypackage.MyProgram 

这个程序运行时间很长。 它一次一次地使用System.out.println将输出写入控制台。

是否有可能直接输出到控制台和实时日志文件,而无需修改现有的Java代码?

如果Windows 7无法做到这一点,是否有可能在Java中编写Tee实用程序?

它在Windows 8中解决?

要做到这一点,“不修改现有的Java代码”,你可以编写另一个包装类,适当重新分配System.out ,然后调用现有的主类

 package mypackage; import java.io.*; import org.apache.commons.io.output.*; public class TeeWrapper { public static void main(String[] args) throws Exception { FileOutputStream logFile = new FileOutputStream("log.txt"); try { System.setOut(new PrintStream(new TeeOutputStream(System.out, logFile))); MyProgram.main(args); } finally { logFile.close(); } } } 

(使用Apache commons-io的TeeOutputStream )。

你运行包装而不是原来的类

 java -classpath classfolder mypackage.TeeWrapper 

tee命令可以帮助你,但它是一个Unix命令。 您可以使用此批处理文件作为tee模拟。

例:

 systeminfo | tee_nt.bat 1.txt 

这是可能的,只需从system.in读取并输出到system.out和一个文件。