SequenceInputStream 序列流
构造方法
SequenceInputStream(Enumeration<? extends InputStream> e)
通过记住参数来初始化新创建的 SequenceInputStream,该参数必须是生成运行时类型为 InputStream 对象的 Enumeration 型参数。SequenceInputStream(InputStream s1, InputStream s2)
通过记住这两个参数来初始化新创建的 SequenceInputStream(将按顺序读取这两个参数,先读取 s1,然后读取 s2),以提供从此 SequenceInputStream 读取的字节。
package test;
import java.io.File;
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.Enumeration;
import java.util.Vector;
/*
* 需求:将a.txt 与 b.txt 合并到 c.txt
*/
public class DemoMerge {
public static void main(String[] args) throws IOException{
// merge1();
// merge2();
merge3();
}
public static void merge1() throws FileNotFoundException, IOException {
File infile1=new File("F:\\test\\a.txt");
File infile2=new File("F:\\test\\b.txt");
File outfile=new File("F:\\test\\c.txt");
//建立数据的输入输出通道
FileInputStream fileInputStream1=new FileInputStream(infile1);
FileInputStream fileInputStream2=new FileInputStream(infile2);
FileOutputStream fileOutputStream=new FileOutputStream(outfile);
//把输入流存储到集合中,然后再从集合中读取
ArrayList<FileInputStream> list=new ArrayList<FileInputStream>();
list.add(fileInputStream1);
list.add(fileInputStream2);
//准备一个缓冲数组
byte[] buf=new byte[1024];
int length=0;
for(int i=0;i<list.size();i++){
FileInputStream fileInputStream=list.get(i);
while((length=fileInputStream.read(buf))!=-1){// int read(byte[] b) 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
fileOutputStream.write(buf,0,length);// void write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流
}
//关闭资源
fileInputStream.close();
}
fileOutputStream.close();
}
//使用SequenceInputStream合并文件
public static void merge2() throws IOException{
//找到目标文件
File inFile1=new File("F:\\test\\a.txt");
File inFile2=new File("F:\\test\\b.txt");
File outFile=new File("F:\\test\\c.txt");
//建立数据的输入输出通道
FileInputStream fileInputStream1=new FileInputStream(inFile1);
FileInputStream fileInputStream2=new FileInputStream(inFile2);
FileOutputStream fileOutputStream=new FileOutputStream(outFile);
//建立序列流对象
SequenceInputStream sequence=new SequenceInputStream(fileInputStream1,fileInputStream2);
byte[] buf=new byte[1024];
int length=0;
while((length=sequence.read(buf))!=-1){
fileOutputStream.write(buf, 0, length);
}
//关闭资源
sequence.close();
fileOutputStream.close();
fileInputStream2.close();
}
//把三个文件合并成一个
public static void merge3() throws IOException{
//找到目标文件
File file1=new File("F:\\test\\a.txt");
File file2=new File("F:\\test\\b.txt");
File file3=new File("F:\\test\\c.txt");
File file4=new File("F:\\test\\d.txt");
//建立对应的输入输出流对象
FileInputStream fileInputStream1=new FileInputStream(file1);
FileInputStream fileInputStream2=new FileInputStream(file2);
FileInputStream fileInputStream3=new FileInputStream(file3);
FileOutputStream fileOutputStream=new FileOutputStream(file4);
//创建序列流对象
Vector<FileInputStream> vector=new Vector<FileInputStream>();
vector.add(fileInputStream1);
vector.add(fileInputStream2);
vector.add(fileInputStream3);
Enumeration<FileInputStream> e=vector.elements();
SequenceInputStream sequenceInputStream=new SequenceInputStream(e);
//读取文件数据
byte[] buf=new byte[1024];
int length=0;
while((length=sequenceInputStream.read(buf))!=-1){
fileOutputStream.write(buf, 0, length);
}
//关闭资源
sequenceInputStream.close();
fileOutputStream.close();
}
}