Можно ли написать тройник в пакете Windows или на Java?
У меня есть Java-программа, которую я запускаю в консоли Windows 7:
java -classpath classfolder mypackage.MyProgram
Эта программа работает очень долго. Время от времени он записывает вывод в консоль, используя System.out.println.
Можно ли направить его вывод на консоль и в файл журнала в режиме реального времени без изменения существующего кода Java?
Если Windows 7 не может этого сделать, возможно ли написать утилиту Tee на Java?
Это решается в Windows 8?
3 ответа
Чтобы сделать это "без изменения существующего 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();
}
}
}
(используя TeeOutputStream из Apache commons-io).
Вы запускаете оболочку вместо исходного класса
java -classpath classfolder mypackage.TeeWrapper
tee
Команда может помочь вам, но это команда Unix. Вы можете использовать этот пакетный файл как аналог tee
,
Пример:
systeminfo | tee_nt.bat 1.txt
Это возможно, просто прочитайте из system.in и выведите как в system.out, так и в файл.