2016-12-24 51 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这样的旧集合类型来构造它,但它可以工作。

相关问题