java 21 - 13 IO流之 合并流

SequenceInputStream :表示其他输入流的逻辑串联。

 

构造方法摘要
SequenceInputStream(Enumeration<? extends InputStream> e)
          通过记住参数来初始化新创建的 SequenceInputStream,该参数必须是生成运行时类型为 InputStream 对象的 Enumeration 型参数。
SequenceInputStream(InputStream s1, InputStream s2)
          通过记住这两个参数来初始化新创建的 SequenceInputStream(将按顺序读取这两个参数,先读取 s1,然后读取 s2),以提供从此 SequenceInputStream 读取的字节。

 

首先演示第二个构造方法:

 SequenceInputStream(InputStream s1, InputStream s2)

需求:把2个文件的内容复制到另1个文件中
  以前的操作:
    a.txt -- b.txt
    c.txt -- d.txt
  现在想要:
    a.txt+b.txt -- c.txt

 1 public static void main(String[] args) throws IOException {
 2         // 把DataStreamDemo.java和user.txt合并成Copy.txt
 3         
 4         //首先封装2个文件,由于SequenceInputStream(InputStream s1, InputStream s2)需要的参数列表是InputStream类的
 5         //FileInputStrem是InputStream的子类,使用多态:
 6         InputStream in1 = new FileInputStream("DataStreamDemo.java");
 7         InputStream in2 = new FileInputStream("user.txt");
 8         //把这两个文件放进SequenceInputStream中
 9         SequenceInputStream in = new SequenceInputStream(in1, in2);
10         
11         //封装目的地
12         BufferedOutputStream bw = new BufferedOutputStream(new FileOutputStream("Copy.txt"));
13         //读取in1和in2的数据,并写入in中
14         byte[] by = new byte[1024];
15         int len = 0;
16             while((len = in.read(by)) != -1){
17                 bw.write(by,0,len);
18             }    
19             in1.close();
20             in2.close();
21             bw.close();
22             in.close();
23         
24     }

 

3、演示第一种构造方法:

SequenceInputStream(Enumeration e)
  通过简单的回顾我们知道了Enumeration是Vector中的一个方法的返回值类型。
  Enumeration<E> elements()

需求:把3个文件的数据复制到另一个文件中
  以前的操作:
    a.txt -- b.txt
    c.txt -- d.txt
    e.txt -- f.txt
  现在想要:
    a.txt+b.txt+c.txt -- d.txt

 1     public static void main(String[] args) throws IOException {
 2         //SequenceInputStream(Enumeration e)需要的是Enumeration
 3         //而Enumeration是Vector中的一个方法的返回值类型。Enumeration<E> elements()
 4         //所以就要实现这个方法。
 5 
 6         //首先定义一个Vector对象
 7         Vector<InputStream> v = new Vector<InputStream>();
 8         InputStream i1 = new FileInputStream("pw.txt");
 9         InputStream i2 = new FileInputStream("user.txt");
10         InputStream i3 = new FileInputStream("DataStreamDemo.java");
11         
12         //把这三个文件添加到Vector
13         v.add(i1);
14         v.add(i2);
15         v.add(i3);
16         //实现Vector的这个方法,得到Enumeration
17         Enumeration<InputStream> e = v.elements();
18         //得到以后就可以使用下面这个方法,这样的话,3个文件中的数据就存储在si中了
19         SequenceInputStream si = new SequenceInputStream(e);
20         
21         //建立输入流
22         BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream("Copy.txt"));
23         
24         //读取Vertor的数据,再添加到Copy.txt中
25         byte[] by = new byte[1024];
26         int len = 0;
27         while((len = si.read(by)) != -1){
28             bo.write(by,0,len);
29         }
30         si.close();
31         bo.close();
32     }

 

posted @ 2016-10-03 21:04  卡拉瓦  阅读(345)  评论(0编辑  收藏  举报