黑马程序员技术交流社区

标题: 合并文件的疑问 [打印本页]

作者: hanyahui    时间: 2012-12-29 12:05
标题: 合并文件的疑问
  1. package y12.m12.d27;

  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.SequenceInputStream;
  7. import java.util.ArrayList;
  8. import java.util.Collections;
  9. import java.util.Enumeration;
  10. import java.util.Properties;

  11. public class MergeFile {

  12.         private static final int SIZE = 1048576;
  13.         /**
  14.          * @param args
  15.          * @throws IOException
  16.          */
  17.         public static void main(String[] args) throws IOException {
  18.                 // TODO 自动生成的方法存根
  19.                 //要合并的文件夹
  20.                 File dir=new File("d:\\partfiles");
  21.                 mergeFile(dir);
  22.         }
  23.         private static void mergeFile(File dir) throws IOException {
  24.                 // TODO 自动生成的方法存根
  25.                 //读取配置文件
  26.                 File[] files=dir.listFiles(new SuffixFilter(".properties"));
  27.                 if(files.length!=1)
  28.                 {
  29.                         throw new RuntimeException(dir+",给目录下没有properties文件或者文件不唯一");
  30.                 }
  31.                 //原则上只有一个配置文件
  32.                 File configfile=files[0];
  33.                 Properties prop=new Properties();
  34.                 //关联配置文件
  35.                 FileInputStream fis=new FileInputStream(configfile);
  36.                 //加载
  37.                 prop.load(fis);
  38.                 //读取值和键
  39.                 String filename=prop.getProperty("filename");
  40.                 int count=Integer.parseInt(prop.getProperty("partcount"));
  41.                 //用过滤器选择指定的文件
  42.                 File[] partFiles=dir.listFiles(new SuffixFilter(".part"));
  43.                 //碎片文件的个数是总数减去配置文件数,也就是 ”总数-1“
  44.                 if(partFiles.length!=(count-1))
  45.                 {
  46.                         throw new RuntimeException("碎片文件 不符合要求,个数不对!应该是"+count+"个");
  47.                 }
  48.                
  49.                 //定义集合
  50.                 ArrayList<FileInputStream> al=new ArrayList<FileInputStream>();
  51.                 //为什么用count会抛异常
  52.                 for(int x=0;x<partFiles.length;x++)
  53.                 {
  54.                         //添加碎片文件到集合
  55.                         al.add(new FileInputStream(partFiles[x]));
  56.                 }
  57.                
  58.                 Enumeration<FileInputStream> en=Collections.enumeration(al);
  59.                 //序列流
  60.                 SequenceInputStream sis=new SequenceInputStream(en);
  61.                 //指定输出的路径和名字
  62.                 FileOutputStream fos=new FileOutputStream(new File(dir,filename));
  63.                 //写
  64.                 int len=0;
  65.                 byte[] buf=new byte[SIZE];
  66.                 while((len=sis.read(buf))!=-1)
  67.                 {
  68.                         fos.write(buf,0,len);
  69.                 }
  70.                 fos.close();
  71.                 sis.close();
  72.         }

  73. }
复制代码
把x<partFiles.length换成x<count 为什么会抛异常,我记得老师说可以换的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2