A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

SequenceInputStream
  1. /*
  2. 需求:合并几个文件成一个文件。

  3. 分析:        1、合并流需要类SequenceInputStream实现,它可串联流,当合并对象超过两个时,应该使用枚举
  4.                 2、将几个文件封装至流,并放到同一集合,因为只有Vector提供获取Enumeration的方法,所以使用Vector
  5.                 3、Vector获取的Enumeration传递给SequenceInputStream,将文件流输出至文件
  6. */
  7. /*
  8. SequenceInputStream(Enumeration<? extends InputStream> e)
  9.           通过记住参数来初始化新创建的 SequenceInputStream,该参数必须是生成运行时类型为 InputStream 对象的 Enumeration 型参数。
  10. SequenceInputStream(InputStream s1, InputStream s2)
  11.           通过记住这两个参数来初始化新创建的 SequenceInputStream(将按顺序读取这两个参数,先读取 s1,然后读取 s2),以提供从此 SequenceInputStream 读取的字节。

  12. */
  13. import java.io.*;
  14. import java.util.*;
  15. class SequenceDemo
  16. {
  17.         public static void main(String[] args) throws IOException
  18.         {
  19.                 Vector<FileInputStream> v = new Vector<FileInputStream>();
  20.                 //封装文件至流,并添加到集合
  21.                 for(int i = 1;i<4;i++)
  22.                         v.add(new FileInputStream("c:\\"+i+".txt"));
  23.                 //获取枚举
  24.                 Enumeration<FileInputStream> en = v.elements();
  25.                 //待合并的文件流传给SequenceInputStream
  26.                 SequenceInputStream sin = new SequenceInputStream(en);
  27.                 //流输出至文件
  28.                 //创建输出流
  29.                 FileOutputStream fos = new FileOutputStream("c:\\4.txt");
  30.                 byte[] buf = new byte[1024*1024];
  31.                 int len = 0;
  32.                 while((len=sin.read(buf))!=-1){
  33.                         fos.write(buf,0,len);
  34.                 }
  35.                 //关闭流
  36.                 sin.close();
  37.                 fos.close();
  38.                 System.out.println("Hello World!");
  39.         }
  40. }
复制代码


1 个回复

倒序浏览
以后  会经常用  吧2         
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马