您的位置:首页 > 产品设计 > UI/UE

Java学习笔记之IO(十二):SequenceInputStream序列流

2017-10-11 15:44 405 查看
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.ad
4000
d(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();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: