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实现三个文件的合并,有两种方法:
一、通过合并两个文件是上述方法,嵌套使用,则可以实现三个文件的合并。在此不赘述。
二、使用SequenceInputStream类的第二个构造方法SequenceInputStream(Enumeration<? extends InputStream> e) 。

方法二是通过记住参数来初始化新创建的 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 的路径下。

合并多个文件(推荐使用)

以上虽然实现了多个文件的合并,但是,传递的参数太多,而且,不具有灵活性。
调用方法的时候,参数个数必须满足足够的要求。
下面,我们
通过字符串数组的方式来传递文件的地址参数,来对上面的方法进行
改进。


Java代码:
	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 中。

(调用时必须保证  1.txt、2.txt、33.txt、333.txt  存在。)

Java学习笔记——SequenceInputStream类合并文件的综合举例分析的更多相关文章

  1. Java学习笔记——File类之文件管理和读写操作、下载图片

    Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...

  2. Java学习笔记之---类和对象

    Java学习笔记之---类和对象 (一)类 类是一个模板,它描述一类对象的行为和状态  例如:动物类是一个类,动物们都有属性:颜色,动物们都有行为:吃饭 public class Dog { Stri ...

  3. java 学习笔记之 流、文件的操作

    ava 学习笔记之 流.文件的操作 对于一些基础的知识,这里不再过多的解释, 简单的文件查询过滤操作 package com.wfu.ch08; import java.io.File; import ...

  4. Java学习笔记-File类的基本方法

    要渐渐养成写博客的习惯-----> 前段时间看Mars的java中的I/O流没怎么懂,发现I/O流好难啊.今天重新看一遍其他教学,还有书籍,做些笔记,记录下每天的学习生活. File类的一些方法 ...

  5. 0018 Java学习笔记-面向对象-类的基本要素

    类与对象 大街上一个个的人,就是一个个对象 类是对一群对象的抽象,比如人都有性别.年龄.姓名,都会吃饭.睡觉等.姓名性别可以抽象为变量,吃饭睡觉可以抽象为方法,像下面一样定义个类来形容人 public ...

  6. Java学习笔记 04 类和对象

    一.类和对象的概念 类 >>具有相同属性和行为的一类实体 对象 >>实物存在的实体.通常会将对象划分为两个部分,即静态部分和动态部分.静态部分指的是不能动的部分,被称为属性,任 ...

  7. Java学习笔记-嵌套类

    嵌套类 嵌套类有两种类别:static and non-static,分别对应为静态嵌套类和内部类. class OuterClass { ... static class StaticNestedC ...

  8. Java学习笔记7---父类构造方法有无参数对子类的影响

    子类不继承父类的构造方法,但父类的构造方法对子类构造方法的创建有影响.具体来说就是: ①.当父类没有无参构造方法时,子类也不能有无参构造方法:且必须在子类构造方法中显式以super(参数)的形式调用父 ...

  9. Java学习笔记之——类与对象

    1.参数的传递方式 1)值传递 2)引用传递 2.类和对象: (1)类的定义: public class 类名{ 类型 属性1: 类型 属性2: ……… public 返回值类型 方法名1(形参){ ...

随机推荐

  1. 转:Netty系列之Netty高性能之道

    1. 背景 1.1. 惊人的性能数据 最近一个圈内朋友通过私信告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K的复杂POJO对象)的跨节点远程服务调用 ...

  2. c语言之函数指针

    一.基础研究 这里研究的内容是函数指针,需要我们在研究后构造程序来描述函数指针数组的用法和向函数传函数指针的方法. 指针有很多种:整型指针.结构体指针.数组指针等等,它们的本质是它们的值都是一个地址, ...

  3. JAVA简单的UI设计

    手写代码,还是痛苦点,但对布局有再深入的流程理解, 全IDE会更快速.. package SwingGui.sky.com; import javax.swing.*; import java.awt ...

  4. Java获取程序或项目路径的常用方法

    在写java程序时不可避免要获取文件的路径,比较常用的方法有: 1 在任意的class里调用: this.getClass().getClassLoader().getResource("/ ...

  5. 开源src镜像

    开源src镜像: http://download.savannah.gnu.org/releases/

  6. -_-#ueditor编辑器chrome浏览器下只能复制最后一行

    被过滤掉了

  7. java—— 调用系统命令

    调用所在环境的命令 链接:http://blog.csdn.net/yy6060/article/details/6311916 1 import java.io.*; 2 class Exec{ 3 ...

  8. [Unit Testing] Node testing: Test api Get request

    Using mocha: "devDependencies": { "should": "^5.2.0", "supertest& ...

  9. 要缩小通过两个触摸点的观点(iOS)

    于AppDelegate.m档,创建一个视图控制器 #import "MAYAppDelegate.h" #import "MAYViewController.h&quo ...

  10. table标签

    table标签使我们最常用的的标签,在使用table标签时我们要注意一些其属性,早期我们经常使用table标签对其进行页面布局但是现在我们基本不再使用,由此可见table标签也是非常强大的一个工具. ...