package com.io.g_sequence;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Vector;
import org.junit.Test;
/*
需求:把 a.txt 与 b.txt 文件的内容合并;
SequenceInputStream:表示其他流的逻辑串联。他从输入流的有序集合开始,并从第一个输入流开始读取,直到到达
文件末尾,接着从第二个输入流读取,以此类推,直到到达包含的最后一个输入流的文件末尾为止;
*/
public class Demo1 {
// 使用字节流实现文件的合并
@Test
public void test1() throws IOException{
// 找到目标文件
File inFile1 = new File("D:\\a.txt");
File inFile2 = new File("D:\\b.txt");
File outFile = new File("D:\\c.txt");
// 建立输入输出通道
FileInputStream fileInputStream1 = new FileInputStream(inFile1);
FileInputStream fileInputStream2 = new FileInputStream(inFile2);
FileOutputStream fileOutputStream = new FileOutputStream(outFile);
// 建立缓冲数据
byte[] buf = new byte[1024];
int len = 0;
// 将两个输入流加入集合中
List<FileInputStream> list = new ArrayList<FileInputStream>();
list.add(fileInputStream1);
list.add(fileInputStream2);
// 循环取出输入流,读取数据,然后再将数据输出到文件中
for (int i = 0; i < list.size(); i++){
FileInputStream in = list.get(i);
while ((len = in.read(buf)) != -1){
fileOutputStream.write(buf, 0, len);
}
in.close();
}
fileOutputStream.close();
}
// 使用 SequenceInputStream 实现文件的合并
@Test
public void test2() throws IOException{
// 找到目标文件
File inFile1 = new File("D:\\a.txt");
File inFile2 = new File("D:\\b.txt");
File outFile = new File("D:\\c.txt");
// 建立输入输出通道
FileInputStream in1 = new FileInputStream(inFile1);
FileInputStream in2 = new FileInputStream(inFile2);
FileOutputStream out = new FileOutputStream(outFile);
// 建立序列流对象,并将输入流加入到序列中
SequenceInputStream inputStream = new SequenceInputStream(in1, in2);
// 创建缓冲数组
byte[] buf = new byte[1024];
int len = 0;
// 边读边写;直接调用序列流的read()方法就可以了,因为序列流可以自动从第一个输入流开始读取,直到读取完毕,
// 然后再从第二个输入流开始读取,依次类推;
while ((len = inputStream.read(buf)) != -1){
out.write(buf, 0, len);
}
// 关闭资源
inputStream.close(); // 实际关闭的是输入流
out.close();
}
// 使用SequenceInputStream合并三个文件
@Test
public void test3() throws IOException{
// 找到目标文件
File inFile1 = new File("D:\\a.txt");
File inFile2 = new File("D:\\b.txt");
File inFile3 = new File("D:\\c.txt");
File outFile = new File("D:\\d.txt");
// 创建数据输入输出通道
FileInputStream in1 = new FileInputStream(inFile1);
FileInputStream in2 = new FileInputStream(inFile2);
FileInputStream in3 = new FileInputStream(inFile3);
FileOutputStream out = new FileOutputStream(outFile);
// 将输入流加入Vector集合中
Vector<FileInputStream> vector = new Vector<FileInputStream>();
vector.add(in1);
vector.add(in2);
vector.add(in3);
// 获取Vector集合的迭代器
Enumeration<FileInputStream> elements = vector.elements();
// 创建序列流对象,传入Vector集合的迭代器
SequenceInputStream inputStream = new SequenceInputStream(elements);
// 建立缓冲数组
byte[] buf = new byte[1024];
int len = 0;
// 边读边写
while ((len = inputStream.read(buf)) != -1){
out.write(buf, 0, len);
}
// 关闭资源
inputStream.close();
out.close();
}
}
Java学习笔记之IO(十二):SequenceInputStream序列流
猜你喜欢
转载自blog.csdn.net/qq_29331365/article/details/78204468
今日推荐
周排行