SequenceInputStream- /*
- 需求:合并几个文件成一个文件。
- 分析: 1、合并流需要类SequenceInputStream实现,它可串联流,当合并对象超过两个时,应该使用枚举
- 2、将几个文件封装至流,并放到同一集合,因为只有Vector提供获取Enumeration的方法,所以使用Vector
- 3、Vector获取的Enumeration传递给SequenceInputStream,将文件流输出至文件
- */
- /*
- SequenceInputStream(Enumeration<? extends InputStream> e)
- 通过记住参数来初始化新创建的 SequenceInputStream,该参数必须是生成运行时类型为 InputStream 对象的 Enumeration 型参数。
- SequenceInputStream(InputStream s1, InputStream s2)
- 通过记住这两个参数来初始化新创建的 SequenceInputStream(将按顺序读取这两个参数,先读取 s1,然后读取 s2),以提供从此 SequenceInputStream 读取的字节。
- */
- import java.io.*;
- import java.util.*;
- class SequenceDemo
- {
- public static void main(String[] args) throws IOException
- {
- Vector<FileInputStream> v = new Vector<FileInputStream>();
- //封装文件至流,并添加到集合
- for(int i = 1;i<4;i++)
- v.add(new FileInputStream("c:\\"+i+".txt"));
- //获取枚举
- Enumeration<FileInputStream> en = v.elements();
- //待合并的文件流传给SequenceInputStream
- SequenceInputStream sin = new SequenceInputStream(en);
- //流输出至文件
- //创建输出流
- FileOutputStream fos = new FileOutputStream("c:\\4.txt");
- byte[] buf = new byte[1024*1024];
- int len = 0;
- while((len=sin.read(buf))!=-1){
- fos.write(buf,0,len);
- }
- //关闭流
- sin.close();
- fos.close();
- System.out.println("Hello World!");
- }
- }
复制代码
|
|