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(); } }
相关文章推荐
- Java IO学习笔记+代码(2)
- Java IO学习笔记+代码
- java学习笔记IO
- Java IO学习笔记:字符流
- java_croe 学习笔记之新IO---java.nio 之内存映射文件
- Java IO学习笔记+代码(1)
- Java IO学习笔记+代码(2)
- Java IO学习笔记:概念原理
- Java基础学习笔记(十二)I/O 缓冲流
- 传智博客学习笔记12--JAVA IO
- JAVA高级视频_IO输入与输出01 学习笔记
- Java IO学习笔记:字节流
- Java IO学习笔记:字符流
- Java IO学习笔记
- Java IO学习笔记:字节流
- Java IO学习笔记+代码
- Java IO学习笔记+代码(3)
- Java IO部分的学习笔记
- Java IO学习笔记+代码(3)
- javaIO学习笔记