我有一个在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和一个文件。