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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wuhyoung 中级黑马   /  2014-5-27 12:22  /  713 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我在看毕老师讲基础课程关于讲文件合并流,毕老师只讲了使用vector集合合并流的方法,但是我觉得这个方法用起来比较麻烦,自己在看老师讲的基础课程后面发现 FileOutputStream(des, true);是可以将文件流继续添加的,所以使用这个方法还是可以合并文件流的,并且能够将文件合并进度和文件的大小显示出来,直接上方法代码:
  1.         private void combineFile(File src, File des) throws IOException {
  2.                 Set<File> set = new TreeSet<File>(new MyComparator());
  3.                 File[] files = src.listFiles();
  4.                 FileOutputStream fos = new FileOutputStream(des, true);

  5.                 /**
  6.                  * 将文件存储到集合当中, 集合是有序的, 自己写了一个排序类
  7.                  * */
  8.                 for (File f : files) {
  9.                         set.add(f);
  10.                 }

  11.                 long filesize = set.size() * 5; // 完成后文件大小
  12.                 double size = (100.0) / set.size(); // 每完成一次,完成的进度是多少
  13.                 double lonsize = 0; // 完成了多少进度
  14.                 /**
  15.                  * 按照集合内存储文件的顺序取出文件的部分, 将一起整合写入到流当中去。
  16.                  * */
  17.                 int len = -1;
  18.                 byte[] buf = new byte[1024];
  19.                 for (Iterator<File> it = set.iterator(); it.hasNext();) {

  20.                         lonsize = lonsize + size;
  21.                         if (lonsize > 100)
  22.                                 lonsize = 100;
  23.                         System.out.println("-----合并度------" + (int) lonsize + " % "
  24.                                         + "-----目标大小------" + filesize + "Mb" + "-----完成文件数------"
  25.                                         + degree + " / " + filecount);
  26.                         textarea.append("-----合并度------" + (int) lonsize + " % "
  27.                                         + "-----目标大小------" + filesize + "Mb" + "-----完成文件数------"
  28.                                         + degree + " / " + filecount+"\r\n");
  29.                         File f = it.next();
  30.                         FileInputStream fis = new FileInputStream(f);
  31.                         while ((len = fis.read(buf)) != -1) {
  32.                                 fos.write(buf, 0, len - 20);
  33.                         }
  34.                         fis.close();
  35.                 }
  36.                 fos.close();
  37.         }
复制代码


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马