我有一个“处理器”组件,可以处理单个文件,InputStream,Reader等。
由于各种原因,我最终得到了几个大文件而不是一个大文件。
有没有办法构建一个输入流(或读取器):透明地“追加”所有这些文件,以便: 1)“处理器”不知道一个文件的起始位置或另一个文件的结束位置 2)文件系统中没有发生变化(例如,没有实际附加文件) 3)按顺序读取每个文件,以便我不支付将所有文件加载到内存并在处理器开始读取之前附加它们的费用?
我确信有可能写出这样的东西,但我想知道是否已存在;自从我做了基于文件的IO以来已经有一段时间了。
答案 0 :(得分: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 :(得分:4)
您可以使用SequenceInputStream之类的内容来读取另一个流。