2017-11-20 13 views
0

私は既にいくつかのSFO Links e.g.を解説しました。私が持っているコードは、およそ30のメソッドを持ち、ネストされたループを含む同僚によって書かれたコードです。この問題は、Eclipseでコードを実行しようとすると、コンソールの出力にロングテールの問題があります。コンソールとファイルの両方に印刷する

私が探していたのは、すべてのメソッド内のすべてのsysoutコマンドに変更を加えることなく、結果と中間結果をコンソールとファイルに出力することでした。

私が今行っていることは、ディスプレイ上のファイルとしないように、この

PrintStream out = new PrintStream(new FileOutputStream("output.txt")); 
System.setOut(out); 

しかし、これだけの書き込みのようなものです。

+0

出力を複製するデフォルトの 'OutputStream'があるかどうかをチェックしてください。複数の 'OutputSteam'(1つは継承され、残りは' Collection')に書き込まれ、次に 'System.out'にそのインスタンスが設定されます。 – AxelH

+2

これは特にEclipseに関するものですか? Eclipseには、すべての出力をファイルとコンソールに書き込む設定があります。実行しているものの設定を実行する> Common> Output Fileをチェックして場所を選択します。 –

答えて

1

は、コンソールやテキストファイルPrintStreamが比較的容易で拡張

1

の両方に印刷するTeeOutputStreamを使用して、出力ストリームを分岐することができます。

class ForkOut extends PrintStream { 
    // The other stream to write to. 
    final PrintStream[] others; 

    public ForkOut(PrintStream o1, PrintStream... others) { 
     super(o1); 
     this.others = others; 
    } 

    @Override 
    public void write(int b) { 
     super.write(b); 
     // Echo every write to the other streams. 
     for (PrintStream o : others) { 
      o.write(b); 
     } 
    } 

    @Override 
    public void write(byte[] buf, int off, int len) { 
     super.write(buf, off, len); 
     // Echo every write to the other streams. 
     for (PrintStream o : others) { 
      o.write(buf, off, len); 
     } 
    } 
} 

public void test(String[] args) throws FileNotFoundException { 
    System.out.println("Hello"); 
    System.setOut(new ForkOut(System.out, new PrintStream(new FileOutputStream("output.txt")))); 
    System.out.println("Hello again!"); 
} 
0

System.setOut()方法は、(あなたのケースであるのPrintStream out)希望ストリームにSystem.outストリームへのすべての出力をリダイレクトします。のようなものを試してみてください。あなたはout.print(String)メソッドを使ってファイルに結果を書き込むことを検討し、System.out.print(String)メソッドを持つコンソールで

関連する問題