Javaプログラムのコンソール出力を複数のファイルにリダイレクトするにはどうすればよいですか?


161

Eclipseコンソールの出力をファイルにリダイレクトするにはどうすればよいですか?できます:

  1. Run Configuration-> Commons-> Select a file
  2. とを使用System.setOut(PrintStream)System.setErr(PrintStream)ます。

1)の問題は、コンソール出力を1つのファイルではなく別のファイルに記録する必要があることです。

2)の問題は、生成されたコンソール出力System.out.println()またはスローされた例外のスタックトレースのみを保存することです。他の種類の出力(log4j警告など)はキャプチャしません。

プログラムでコンソール出力を別のファイルにリダイレクトするにはどうすればよいですか?


1)たぶん、あなたは使用"変数.."ことshoude(例)C:\テスト$ {???:??} TXT。
cloverink

2
ここにアイデアがあります。独自のeclipseプラグイン(つまり、cusotmボタン)を作成します。これは、ランダムで一意の値を変数(と呼ばれる${NAME})に割り当て、runと同じことを行います。次に$NAME、出力ファイルの値として使用します。多分?
One Two Three

回答:


176

[別のユーザーとして実行]に移動してRun Configurations-> Commonを選択します。標準入力と標準出力では、ファイルも選択できます。


106
質問の2行目から40人がコピーアンドペーストに賛成票を投じたのはとても陽気だと思います。
AnthonyW 2013

13
@AnthonyWこれは、「Eclipseの出力をファイルにリダイレクトするにはどうすればよいか」というタイトルの質問によって人々がここに導かれることが主な原因だと思います。この回答は、実際にはタイトルの質問に対する回答です。
Gerome Bochmann、

1
Eclipse 4.4(Luna)を使用して「実行構成」が見つからない場合は、([サーバー]タブでサーバーをダブルクリックして)起動構成を開き、[lanuch構成を開く]をクリックして、[共通]タブに移動しました。そのダイアログの下半分に、「標準入出力」というセクションがあります。ここで、[ファイル]をクリックしてファイル名を付けることができます。
Guy Schalnat

1
ヒント:ターミナルを開き、echo $TTYそれが返すものをファイルとして指定します。次に、ターミナルはEclipseコンソールの内容をミラーリングします。
Sridhar Sarnobat

2
何?質問者の質問を注意深く読んだ場合、この答えは正しくありません。
ComputerScientist

11

たとえば、出力ファイル名の中で「変数」を使用できます。

/tmp/FetchBlock-${current_date}.txt

現在の日付:

現在のシステム時刻をyyyyMMdd_HHmmの形式で返します。オプションの引数を使用して、代替フォーマットを提供できます。引数は、java.util.SimpleDateFormatの有効なパターンである必要があります。

または、system_propertyまたはenv_varを使用して動的なものを指定することもできます(どちらかを引数として指定する必要があります)


8

System.outの出力をプログラムで設定するには、次のようにします。

System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream("/location/to/console.out")), true));

編集:

このソリューションはに基づいているためPrintStream、autoFlushを有効にできますが、ドキュメントによると:

autoFlush-ブール値。trueの場合、バイト配列が書き込まれるか、printlnメソッドの1つが呼び出されるか、または改行文字またはバイト( '\ n')が書き込まれるたびに、出力バッファーがフラッシュされます

したがって、新しい行が書き込まれない場合は、System.out.flush()手動で忘れずに行ってください。

(ロバート・テュペロ・シュネックに感謝)


1
System.out.flush()一部の出力を見落とす可能性を回避するために終了する必要があるようです。
Robert Tupelo-Schneck 2015年

1

この問題を解決するには、$ {string_prompt}変数を使用します。アプリケーションの実行時に入力ダイアログが表示されます。そのダイアログで手動で日付/時刻を設定できます。

  1. ファイルパスの末尾にカーソルを移動します。 ここに画像の説明を入力してください

  2. 変数をクリックしてstring_promptを選択します ここに画像の説明を入力してください

  3. [適用して実行]を選択します ここに画像の説明を入力してください ここに画像の説明を入力してください


0

Systemクラスの変数を次のように設定することでこれを行うことができます

System.setOut(new PrintStream(new FileOutputStream( "Path to output file")))。また、「out」(System.out.close()またはSystem.out.flush())変数を閉じるかフラッシュして、一部の出力が失われないようにする必要があります。

ソース:http : //xmodulo.com/how-to-save-console-output-to-file-in-eclipse.html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.