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(形参){ ...
随机推荐
- 网站优化指南之数据库缓存、CDN与云存储
1 数据库缓存. 常见的做法是用内存做cache,把数据库里的内容提前取出读到内存里,用户再请求时,就不直接读数据库,而是读内存里的数据,从而缓解了数据库的压力. 过去比较常用的缓存软件是memcac ...
- POJ2115 C Looooops(数论)
题目链接. 分析: 数论了解的还不算太多,解的时候,碰到了不小的麻烦. 设答案为x,n = (1<<k), 则 (A+C*x) % n == B 即 (A+C*x) ≡ B (mod n) ...
- 【转】Android源代码查看途径
原文网址:http://www.it165.net/pro/html/201501/32967.html 作为一个android coder,多阅读android源码对提高android开发水平是很有 ...
- 【模拟】Codeforces 706A Beru-taxi
题目链接: http://codeforces.com/problemset/problem/706/A 题目大意: 家的坐标在sx,sy,有n辆车,每辆车坐标xi,yi,速度vi,问最快的一辆车什么 ...
- Triangle——LeetCode
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...
- Java 设计模式实现 不错的引用
这段时间有兴趣重新温习一下设计模式在Java中的实现,碰巧看到一个不错的设计模式总结,这里引用一下作为参考. 创建型模式: JAVA设计模式-Singleton JAVA设计模式-Factory JA ...
- NSString copy or not (strong)?
前些日子笔者一直在维护公司的一些旧项目,项目里面的NSString属性几乎全部用的strong,而我在给项目增加一些新的功能的,又都用的copy,因为在我的脑子里几乎已经把NSString大部分 ...
- CodeForces 146E - Lucky Subsequence DP+扩展欧几里德求逆元
题意: 一个数只含有4,7就是lucky数...现在有一串长度为n的数...问这列数有多少个长度为k子串..这些子串不含两个相同的lucky数... 子串的定义..是从这列数中选出的数..只要序号不同 ...
- UVa 11063 - B2-Sequence
题目:给你一组数据{ b1,b2....,bk }中,推断是否随意两个数字的和都不同. 分析:数论.计算出全部结果,排序推断相邻结果是否同样就可以. 说明:注意数据的合法性检查. #include & ...
- android Json解析详解
JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语 言的支持),从而可以在不同平台间进行数 ...