如何将来自多个文件的数据合并到一个缓冲区中?
How to unite data from several files in ONE buffer?
我想用来自多个文件的数据创建一个流。我该怎么做?还有我的javaclass。或者也许我不应该使用 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
}
}
您可以从每个文件的 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 提出的改进建议!)
如果您不需要 BufferedReader
并且 Stream 解决方案就足够了,请使用它。
如果您确实需要 Reader,您可以使用 SequenceInputStream
连接 InputStream
,然后从中创建一个 BufferedReader
。
API 有点笨拙,因为 SequenceInputStream
采用 Enumeration
,因此您必须使用一种旧的集合类型(如 Vector)来构造它,但它可以工作。
我想用来自多个文件的数据创建一个流。我该怎么做?还有我的javaclass。或者也许我不应该使用 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
}
}
您可以从每个文件的 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 提出的改进建议!)
如果您不需要 BufferedReader
并且 Stream 解决方案就足够了,请使用它。
如果您确实需要 Reader,您可以使用 SequenceInputStream
连接 InputStream
,然后从中创建一个 BufferedReader
。
API 有点笨拙,因为 SequenceInputStream
采用 Enumeration
,因此您必须使用一种旧的集合类型(如 Vector)来构造它,但它可以工作。