有没有一种简单的方法来创建由几个附加文件组成的Java InputStream?

Uri*_*Uri 7 java io

我有一个"处理器"组件,可以处理单个文件,InputStream,Reader等.

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

有没有办法构建一个输入流(或读取器):透明地"追加"所有这些文件,以便:1)"处理器"不知道一个文件的起始位置或另一个文件的结束2)文件系统中没有发生变化(例如,没有实际附加文件)3)按顺序读取每个文件,以便我不支付将所有文件加载到内存并在处理器开始读取之前附加它们的费用?

我敢肯定有可能写出这样的东西,但我想知道是否已经存在; 自从我做了基于文件的IO以来已经有一段时间了.

eri*_*son 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));
Run Code Online (Sandbox Code Playgroud)

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