2016-12-24 6 views
0

私はいくつかのファイルからのデータで1つのストリームを作成したいと思います。私はそれをどのようにすることができますか?私のJavaクラスがあります。あるいは、私はBufferReader以外の方法で使うべきでしょうか?ありがとう!!複数のファイルのデータを1つのバッファにまとめるには?

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.util.stream.Stream; 

public class BuffReader { 

public static void main(String[] args) throws FileNotFoundException { 
    File file1 = new File("src/page_1.txt"); 
    File file2 = new File("src/page_2.txt"); 
    File file3 = new File("src/page_3.txt"); 
    BufferedReader bufferedReader = new BufferedReader(new FileReader(file1)); 

    //*** I'd like get one bufferedReader with file1 + file2 + file3. 

    Stream<String> stream = bufferedReader.lines(); // get Stream 
    stream.forEach(e -> System.out.println(e)); // Working with Stream 
} 
} 

答えて

1

あなたは、ファイルごとにBufferedReaderから1 Streamを作成ストリームにそれらを結合して、これらすべてを連結したストリームを作成するために、Stream#flatMapメソッドを使用することができます。

import java.util.function.Function; 
import java.util.stream.Stream; 

public class CombinedStreams 
{ 
    public static void main(String[] args) 
    { 
     Stream<String> stream0 = Stream.of("line0", "line1"); 
     Stream<String> stream1 = Stream.of("line2", "line3"); 
     Stream<String> stream2 = Stream.of("line4", "line5"); 

     Stream<String> stream = Stream.of(stream0, stream1, stream2) 
      .flatMap(Function.identity()); 

     stream.forEach(e -> System.out.println(e)); 
    } 
} 

(賞賛を提案改善のためdiesieben07する!)

+1

Streamsを連結するためのより簡潔な方法は、 'Stream.of(streams).flatMap(Function.identity()) 'を使用することです。 – diesieben07

+0

@ diesieben07あなたが答えとしてこれを書いたら、私は私のものを削除するでしょう。 – Marco13

+0

あなたの編集は私のことでいいです:) – diesieben07

1

をあなたがBufferedReaderを必要としないとストリームのソリューションは、以下のことを十分に使用している場合。 Readerが絶対に必要な場合は、SequenceInputStreamを使用してInputStreamを連結してからBufferedReaderを作成します。 SequenceInputStreamにはEnumerationが含まれているため、APIは少し不器用です。そのため、Vectorなどの古いコレクションタイプの1つを使用して構築する必要がありますが、機能します。

関連する問題