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 }
何事都只需坚持..
难?
维熟尔。
LZL的自学历程...只需坚持