2

Java プログラムの stdout と stderror を 1 行ずつキャプチャする方法はありますか?

おそらく、 を使用して Logger インスタンスにハンドラーを追加する方法に似たものですaddHandler

編集:デフォルトのハンドラーを置き換えたくありません。コマンド ラインに出力を表示する必要があります。

4

3 に答える 3

3

System.setOut()System.setErr()を使用すると、標準出力とエラー ストリームを任意の PrintStream に設定し、すべてをキャプチャできます。

追加: これを行うエレガントな方法が存在するかどうかはわかりませんが、その方法の 1 つは次のとおり
です。 1. デフォルトの出力ストリームを保存します
PrintStream defaultOut = System.out;
(ただし、System.getOut() があると楽しいでしょう)
2. System.out を必要な印刷ストリーム (たとえば、任意のファイル) にリダイレクトします
。 3. System.out.println() を使用する代わりに、以下を実行する印刷関数を使用します。
print(Object o){
defaultOut.println(o);//この関数で defaultOut が可視であると仮定
System.out.println(o); }

于 2010-11-25T02:53:47.307 に答える
2

メソッドSystem.setOutおよび を使用すると、および変数が参照するオブジェクトSystem.setErrを変更できます。これらを使用して、デフォルトのオブジェクトを出力をキャプチャするオブジェクトに置き換えたり、それを使って好きなことをしたりできます。PrintStreamSystem.outSystem.errPrintStream

ファローアップ

出力をコマンドラインに送る必要があるため、PrintStreams を置き換えたくありません。

あなたのコードはそれを処理できます:

  1. すべての出力を別のインスタンスにOutputStream書き込み、さらに出力をキャプチャする のサブクラスを作成します。OutputStream「その他」のインスタンスをコンストラクターのパラメーターにします。
  2. との現在の値を取得しSystem.outますSystem.err
  3. サブクラスを 2 回インスタンス化し、System.outとのSystem.err値をそれぞれコンストラクター パラメーターとして使用します。
  4. これら 2 つのインスタンスをインスタンスとしてラップしPrintStreamます。
  5. andを呼び出しSystem.setOutて andをインスタンスSystem.setErrに置き換えます。System.outSystem.errPrintStream
于 2010-11-25T02:53:34.063 に答える
1

メッセージコンソールを使用すると、出力をテキストペインに表示し、コマンドラインに表示できます。

于 2010-11-25T03:01:16.353 に答える