Java学习笔记——SequenceInputStream类合并文件的综合举例分析
SequenceInputStream 介绍
SequenceInputStream 类表示其他输入流的逻辑串联,即文件的合并。
它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。
合并两个文件
SequenceInputStream 类提供了两个构造函数。我们先来看第一个。
  所用的构造函数:
  SequenceInputStream(InputStream s1, InputStream s2)
通过记住这两个参数来初始化新创建的 SequenceInputStream(将按顺序读取这两个参数,先读取 s1,然后读取 s2),
以提供从此 SequenceInputStream 读取的字节。 即将文件 file1 和文件 file2 合并至文件 file3 中。
代码如下:
	public static void SequenceTest1(String file1, String file2,String file3){
		try {
			FileInputStream iStream1 = new FileInputStream(new File(file1));
			FileInputStream iStream2 = new FileInputStream(new File(file2));
			FileOutputStream iStream3 = new FileOutputStream(new File(file3));
			InputStream si = new SequenceInputStream(iStream1, iStream2);
			byte[] arr = new byte[1024*20];
			int len = 0;
			while ((len = si.read(arr))!=-1) {
				iStream3.write(arr,0,len);
				iStream3.flush();//刷新此缓冲的输出流。
			}
			si.close();
			iStream3.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
合并三个文件
方法二是通过记住参数来初始化新创建的 SequenceInputStream,该参数必须是生成运行时类型为 InputStream 对象的 Enumeration 型参数。
即通过集合类的方式来传递文件的地址参数。
Java代码:
	public static void SequenceTest3(String file1, String file2,String file3,String file4){
		SequenceInputStream iStream = null;
		BufferedOutputStream bStream = null;
		Vector<InputStream >vector = new Vector<InputStream>();
		try {
			vector.addElement(new FileInputStream(new File(file1)));
			vector.addElement(new FileInputStream(new File(file2)));
			vector.addElement(new FileInputStream(new File(file3)));
			Enumeration<InputStream>enumeration = vector.elements();
			iStream = new SequenceInputStream(enumeration);
			bStream = new BufferedOutputStream(new FileOutputStream(new File(file4)));
			byte[] arr = new byte[1024*20];
			int len = 0;
			while ((len = iStream.read(arr))!=-1) {
				bStream.write(arr, 0, len);
				bStream.flush();//刷新此缓冲的输出流。
			}
			iStream.close();
			bStream.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
上述代码是将 file1、 file2、 file3 的路径文件合并至 file4 的路径下。
合并多个文件(推荐使用)
通过字符串数组的方式来传递文件的地址参数,来对上面的方法进行
改进。
	public static void SequenceTest4(String[] filesrc,String fileresult){
		SequenceInputStream iStream = null;
		BufferedOutputStream bStream = null;
		Vector<InputStream >vector = new Vector<InputStream>();
		try {
			for (int i = 0; i < filesrc.length; i++) {
				vector.addElement(new FileInputStream(new File(filesrc[i])));
			}
			Enumeration<InputStream>enumeration = vector.elements();
			iStream = new SequenceInputStream(enumeration);
			bStream = new BufferedOutputStream(new FileOutputStream(new File(fileresult)));
			byte[] arr = new byte[1024*20];
			int len = 0;
			while ((len = iStream.read(arr))!=-1) {
				bStream.write(arr, 0, len);
				bStream.flush();//刷新此缓冲的输出流。
			}
			iStream.close();
			bStream.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
调用举例:
		String[] arr = {"1.txt", "2.txt","33.txt","333.txt"};
		SequenceTest4(arr, "w.txt");
以上代码是将 1.txt、2.txt、33.txt、333.txt 中的文件合并至 文件 w.txt 中。
Java学习笔记——SequenceInputStream类合并文件的综合举例分析的更多相关文章
- Java学习笔记——File类之文件管理和读写操作、下载图片
		
Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...
 - Java学习笔记之---类和对象
		
Java学习笔记之---类和对象 (一)类 类是一个模板,它描述一类对象的行为和状态 例如:动物类是一个类,动物们都有属性:颜色,动物们都有行为:吃饭 public class Dog { Stri ...
 - java 学习笔记之 流、文件的操作
		
ava 学习笔记之 流.文件的操作 对于一些基础的知识,这里不再过多的解释, 简单的文件查询过滤操作 package com.wfu.ch08; import java.io.File; import ...
 - Java学习笔记-File类的基本方法
		
要渐渐养成写博客的习惯-----> 前段时间看Mars的java中的I/O流没怎么懂,发现I/O流好难啊.今天重新看一遍其他教学,还有书籍,做些笔记,记录下每天的学习生活. File类的一些方法 ...
 - 0018 Java学习笔记-面向对象-类的基本要素
		
类与对象 大街上一个个的人,就是一个个对象 类是对一群对象的抽象,比如人都有性别.年龄.姓名,都会吃饭.睡觉等.姓名性别可以抽象为变量,吃饭睡觉可以抽象为方法,像下面一样定义个类来形容人 public ...
 - Java学习笔记 04 类和对象
		
一.类和对象的概念 类 >>具有相同属性和行为的一类实体 对象 >>实物存在的实体.通常会将对象划分为两个部分,即静态部分和动态部分.静态部分指的是不能动的部分,被称为属性,任 ...
 - Java学习笔记-嵌套类
		
嵌套类 嵌套类有两种类别:static and non-static,分别对应为静态嵌套类和内部类. class OuterClass { ... static class StaticNestedC ...
 - Java学习笔记7---父类构造方法有无参数对子类的影响
		
子类不继承父类的构造方法,但父类的构造方法对子类构造方法的创建有影响.具体来说就是: ①.当父类没有无参构造方法时,子类也不能有无参构造方法:且必须在子类构造方法中显式以super(参数)的形式调用父 ...
 - Java学习笔记之——类与对象
		
1.参数的传递方式 1)值传递 2)引用传递 2.类和对象: (1)类的定义: public class 类名{ 类型 属性1: 类型 属性2: ……… public 返回值类型 方法名1(形参){ ...
 
随机推荐
- 前端工程之模块化(来自百度FEX)
			
模块化 是一种处理复杂系统分解成为更好的可管理模块的方式,它可以把系统代码划分为一系列职责单一,高度解耦且可替换的模块,系统中某一部分的变化将如何影响其它部分就会变得显而易见,系统的可维护性更加简单易 ...
 - Sequence
			
http://poj.org/problem?id=2442 用STL写的时间为:5657MS #include<cstdio> #include<algorithm> #in ...
 - List的数据结构
			
从这张图片说起:TreeList的实现结构: 首先是构建函数 TreeList(Collection coll),调用增加函数: public void add(int index, Object o ...
 - STM32 CAN 波特率设置及采样点设置
			
一.CAN波特率 STM32 位时间定义: ● 同步段(SYNC_SEG):通常期望位的变化发生在该时间段内.其值固定为1个时间单元(1 x tCAN).● 时间段1(BS1):定义采样点的位置.它包 ...
 - A - Fire Net - hdu 1045(二分图匹配)
			
题意:一个阵地可以向四周扫射,求出来最多能修多少个阵地,墙不可以被扫射透,阵地不能同行或者或者列(有墙隔着例外) 分析:很久以前就做过这道题..当时是练习深搜来着,不过时间复杂度比较高,现在再看突然发 ...
 - SKCropNode类
			
继承自 SKNode:UIResponder:NSObject 符合 NSCoding(SKNode) NSCopying(SKNode) NSObject(NSObject) 框架 /System/ ...
 - 二分-hdu-4768-Flyer
			
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4768 题目意思: 有n个A.B.C,每个Ai,Bi,Ci,对于每个P=Ai+k*Ci(P<=B ...
 - mysql中如何更新一个字段的值为它本身的值连接上一个字符串
			
CONCAT(str1,str2,...) 返回结果为连接参数产生的字符串. 如有任何一个参数为NULL ,则返回值为 NULL. 或许有一个或多个参数. 如果所有参数均为非二进制字符串,则结 ...
 - Topcoder SRM 637 (Div.2)
			
A.GreaterGameDiv2 不能更水 #line 7 "GreaterGameDiv2.cpp" #include<cstdio> #include <c ...
 - Python 的数据类型
			
列表 #coding=utf-8 students=["小明","小华","小李","小娟","小云" ...