4

Windows 7 コンソールで実行する Java プログラムがあります。

java -classpath classfolder mypackage.MyProgram

このプログラムは非常に長時間実行されます。System.out.println を使用して、随時コンソールに出力を書き込みます。

既存の Java コードを変更せずに、その出力をコンソールとログ ファイルの両方にリアルタイムで送信することは可能ですか?

Windows 7 でそれができない場合、Java で Tee ユーティリティを作成することは可能ですか?

Windows 8 で解決しましたか?

4

3 に答える 3

4

このteeコマンドは役に立ちますが、これは Unix コマンドです。このバッチ ファイルは、tee.

例:

systeminfo | tee_nt.bat 1.txt
于 2013-01-11T13:13:56.247 に答える
2

「既存の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
于 2013-01-11T12:56:05.557 に答える
1

system.in から読み取り、system.out とファイルの両方に出力するだけで可能です。

于 2013-01-11T12:52:16.590 に答える