2009-06-04 47 views
7

我有一个可以处理单个文件,输入流,阅读器等的“处理器”组件。有没有简单的方法来创建一个由多个附加文件组成的Java InputStream?

由于各种原因,我最终得到了几个大文件而不是一个大文件。

有没有办法来构造一个输入流(或阅读器)是:透明的“附加”所有这些文件,以便: 1)“处理器”不知道,其中一个文件启动或另一端 2)无在文件系统中发生变化(例如,没有实际的文件追加) 3)每个文件都是按顺序读取的,以便我不支付将所有文件加载到内存并在处理器开始读取之前将其附加到内存中的成本?

我确信有可能写这样的东西,但我想知道是否已经存在;自从我使用基于文件的IO之后,这已经有一段时间了。

回答

19

SequenceInputStream连接多个流。

List<InputStream> opened = new ArrayList<InputStream>(files.size()); 
for (File f : files) 
    opened.add(new FileInputStream(f)); 
InputStream is = new SequenceInputStream(Collections.enumeration(opened)); 

打开每个文件时的异常处理(未显示)很重要;确保所有文件最终都会被关闭,即使操作在创建SequenceInputStream之前中止。

+1

该死的,我熟悉管道溪流,不知道这个存在,应该有一个更好看。谢谢 ! – Uri 2009-06-04 19:38:26