2016-12-24 60 views
0

我想用幾個文件中的數據創建一個流。我如何做到這一點?有我的java類。或者,也許我應該用其他方式不使用BufferReader?謝謝 !!如何在一個緩衝區中合併來自多個文件的數據?

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爲每個文件一個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和Stream解決方案是不夠的,使用它。 如果您絕對需要閱讀器,您可以使用SequenceInputStream連接InputStream,然後從中創建BufferedReader。 該API有點笨重,因爲SequenceInputStream需要Enumeration,因此您必須使用像Vector這樣的舊集合類型來構造它,但它可以工作。

相關問題