SequenceInputStream类可以将多个输入流按顺序连接起来。SequenceInputStream的构造方法是使用一对输入流或者一个输入流的枚举(内含多个输入流)作为参数。
//将输入流s1和s2合并
SequenceInputStream(InputStream s1,InputStream s2)
// 该类从枚举流streamEnum中,在对第一个流完成读请求后,转到第二个,第三个……
SequenceInputStream(Enumeration<? extends InputStream> streamEnum)
SequenceInputStream类中的主要方法如下表所示:
采用SequenceInputStream类,可以实现多个文件的合并操作。下图所示为两个文件的合并示意图。
package com.xy.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
public class SequenceDemo {
public static void main(String[] args) {
// 声明两个文件读入流
FileInputStream in1 = null, in2 = null;
// 声明一个序列(合并)流
SequenceInputStream s = null;
FileOutputStream out = null;
try {
// 构造两个被读入的文件
/* 在File类中提供了一个常量—路径分隔符:separator,
* 它在Windows中,自动替换为“\”,
* 而在Linux中自动替换为“/”,
* 从而在某种程度上提高了Java程序可移植性。
* 推荐读者用这种方式来处理路径的分隔符。
* 文件1.txt、2.txt和12.txt,必须是事先已经存在的,
* 否则会发生异常“java. io.FileNotFoundException”。
*/
File inputFile1 = new File("D:" + File.separator + "1.txt");
File inputFile2 = new File("D:" + File.separator + "2.txt");
File outputFile = new File("D:" + File.separator + "12.txt");
in1 = new FileInputStream(inputFile1);
in2 = new FileInputStream(inputFile2);
// 将两个输入流合为一个输入流
s = new SequenceInputStream(in1, in2);
out = new FileOutputStream(outputFile);
int c;
while((c = s.read()) != -1) {
out.write(c);
}
in1.close();
in2.close();
s.close();
out.close();
System.out.println("OK......");
}
catch(IOException e) {
e.printStackTrace();
}
finally {
if(in1 != null) {
try {
in1.close();
}
catch(IOException e) {
e.printStackTrace();
}
}
if(in2 != null) {
try {
in2.close();
}
catch(IOException e) {
e.printStackTrace();
}
}
if(s != null) {
try {
s.close();
}
catch(IOException e) {
e.printStackTrace();
}
}
if(out != null) {
try {
out.close();
}
catch(IOException e) {
e.printStackTrace();
}
}
}
}
}
【结果】