SequenceInputStream可以用来读多个文件,并合并它们。
测试代码:
package com.io;
import java.io.BufferedOutputStream;
import java.io.Closeable;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import junit.framework.TestCase;
public class TestSequenceInputStream extends TestCase {
public void testSequenceInputStream() {
SequenceInputStream sequenceInputStream = null;
Collection<FileInputStream> list = new ArrayList<FileInputStream>();
FileOutputStream fos = null;
BufferedOutputStream bos = null;
for (int i = 0; i < 3; i++) {
try {
list.add(new FileInputStream("c:/" + i + ".txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
Enumeration<FileInputStream> enums = Collections.enumeration(list);
sequenceInputStream = new SequenceInputStream(enums);
byte[] bytes = new byte[1024];
int len = 0;
try {
fos = new FileOutputStream("c:/5.txt");
bos = new BufferedOutputStream(fos);
while ((len = sequenceInputStream.read(bytes)) != -1) {
bos.write(bytes, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
close(bos);
close(fos);
close(sequenceInputStream);
for (FileInputStream in : list) {
close(in);
}
}
}
private void close(Closeable closeable) {
if (closeable != null) {
try {
closeable.close();
closeable = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}