2017-11-26 12 views
2
BufferedReader br = new BufferedReader(new FileReader("shark-data.txt")); 
String fileRead = br.readLine(); 
PrintStream out = new PrintStream(new FileOutputStream("results.txt")); 
System.setOut(out); 

コードは機能し、新しいテキストファイルを作成し、コンソールからの出力をテキストファイルに格納します。問題は私のコンソールに何も表示されないことです。これをどうやって解決するのですか?テキストファイルへの出力、コンソール空 - Java

答えて

1

まず、あなたはAdapterパターンを実装するためのOutputStreamインタフェースから継承したクラスを作成する必要があります

は、あなたが

MAIN

怒鳴るとして、このクラスを使用することができます(アダプタがある場合、私はまだよく分かりません)
 PrintStream finalStream; 
     TreeOutputStream tos; 
     PrintStream out; 

     out = new PrintStream("logs.txt"); 

     tos = new TreeOutputStream(); 
     tos.add(out); 
     tos.add(System.out); 
     finalStream = new PrintStream(tos); 
     System.setOut(finalStream); 

TreeOutputStream

public class TreeOutputStream extends OutputStream{ 

private final List<OutputStream> streams; 

public void add(OutputStream os){ 
    streams.add(os); 
} 

public void remove(OutputStream os){ 
    streams.remove(os); 
} 

public TreeOutputStream() { 
    streams = new ArrayList<>(); 
} 

@Override 
public void write(int i) throws IOException { 
    streams.stream().forEach(strm->{ 
     try { 
      strm.write(i); 
     } catch (IOException ex) { 
      Logger.getLogger(TreeOutputStream.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    }); 
} 

}すべてのストリームの上に出て、ストリームの意志ループがSystem.setOut を実行する前に自分の書き込み方法

+0

他のライブラリにリンクされていないこのソリューションの利点 –

1

次の2つにストリームを分割するApacheのコモンズ-IOからTeeOutputStreamを使用することができます。https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/output/TeeOutputStream.html

OutputStream fos = new FileOutputStream("results.txt"); 
OutputStream consoleOut = System.out; 
PrintStream newOut = new PrintStream(new TeeOutputStream(consoleOut, fos)); 
System.setOut(newOut); 

これは、両方の元System.out(つまりコンソール)とのあなたのファイルへの書き込みPrintStreamを作成します。 Mavenので

は、ここにあなたがあなたにコモンズ-IOを追加するために使用することができ、依存関係のスニペットがプロジェクトです:

<dependency> 
     <groupId>commons-io</groupId> 
     <artifactId>commons-io</artifactId> 
     <version>2.6</version> 
    </dependency> 
1

を呼び出すことスタンダールコンソールを保存し、何が起こるか

PrintStream standard = Sys tem.out;

コンソールにもう一度印刷するには、以下の手順でstandart consoleに切り替える必要があります。コンソールにptintすることができます。

System.setOut(標準); System.out.println( "こんにちは!");

関連する問題