import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import org.junit.Test;
/*
*序列流之文件合并
*将多个流进行逻辑串联(合并变成一个流,操作起来很方便,因为多个源变成了一个源)
*/
public class SequenceInputStreamDemo {
@Test //需求:把seq1.txt、seq2.txt和seq3.txt等多个文件合并到一个文件seq.txt
public void demo() throws IOException{
//读---从源
FileInputStream fis1 = new FileInputStream("seq\\seq1.txt");
FileInputStream fis2 = new FileInputStream("seq\\seq2.txt");
FileInputStream fis3 = new FileInputStream("seq\\seq3.txt");
ArrayList<FileInputStream> list= new ArrayList<FileInputStream>();
list.add(fis1);
list.add(fis2);
list.add(fis3);
Enumeration<FileInputStream> en= Collections.enumeration(list);
//通过记住参数来初始化新创建的 SequenceInputStream,该参数必须是生成运行时类型为 InputStream 对象的 Enumeration 型参数。将按顺序读取由该枚举生成的输入流,
//以提供从此 SequenceInputStream 读取的字节。在用尽枚举中的每个输入流之后,将通过调用该流的 close 方法将其关闭。
SequenceInputStream sis = new SequenceInputStream(en);//★
//写 ---目的
FileOutputStream fos = new FileOutputStream("seq\\seq.txt");
byte[] buf= new byte[16];
int len=0;
while( (len=sis.read(buf))!=-1){
fos.write(buf, 0, len);
}
sis.close();
}
}