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. JAVA基础(1)之hashCode()

    JAVA基础(1)之hashCode() 看到一篇关于hashCode的文章(),写的很详细明白,瞬间有种恍然大悟的感觉,所以特地转过来.原文:http://blog.csdn.net/fenglib ...

  2. MIUI是小米的核心竞争力

    MIUI与众多顶尖的互联网公司合作开发系统功能,题主说的很不完全,当然估计除了MIUI开发组也没人能说的很完整,我试着总结了一下,欢迎补充: 1.云服务:金山云(小米公司持有金山云公司9.87%的股份 ...

  3. POJ2513 Colored Sticks(欧拉)

    题目链接. 题目大意: 给很多木棍,两端被涂了颜色.任意两根木棍的相同颜色处可以拼接在一起,问有没有可能将所有的木棍都连起来,成一条直线? 分析: 考点,欧拉道路. 将一根木棍看成一条边,两端的颜色看 ...

  4. BZOJ1711: [Usaco2007 Open]Dingin吃饭

    1711: [Usaco2007 Open]Dingin吃饭 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 508  Solved: 259[Submit ...

  5. RAM区间最值

    RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就 ...

  6. Android testing tools

    引言 发现一篇关于android 测试的培训,英文的,很全面. Android Testing Training: http://www.vogella.com/training/android/an ...

  7. F - Power Network - poj 1459(简单最大流)

    题目大意:题目说了一大堆,其实都是废话......让人有些不知所云,其实就是给了一些电厂,和一些消费点,然后里面有一些路线什么的,求出消费点可以最多消费的电量是多少. 输入大意: 分析:懂了题意就是一 ...

  8. DeepLearnToolbox使用总结

    GitHub链接:DeepLearnToolbox DeepLearnToolbox A Matlab toolbox for Deep Learning. Deep Learning is a ne ...

  9. python:时间处理模块

    # coding=utf-8 from datetime import date, datetime import time def date_test(): print 'date.max', da ...

  10. linux关于readlink函数获取运行路径的小程序

    http://blog.csdn.net/djzhao/article/details/8178375   相关函数: stat, lstat, symlink表头文件: #include <u ...