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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 金肖 中级黑马   /  2012-5-9 01:51  /  1061 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class MergeFileDemo_2 {
public static void main(String[] args) throws IOException {
  File dir = new File("D:\\a\\");
  mergeFile(dir);                  
}

/*
对碎片文件进行合并
*/
public static void mergeFile(File dir)
   throws IOException {
  if (!dir.exists())
   throw new RuntimeException("文件不存在");
  // 获取后缀名为 .ini 的文件
  File[] files = dir.listFiles(new SuffixFilter(".ini"));
  // 判断该配置文件是否是唯一的
  if (files.length != 1)
   throw new RuntimeException("配置文件不唯一");
  // 记录配置文件信息
  File con = files[0];
  // ======获取文件对象
  Properties prop = new Properties();
  FileInputStream fis = new FileInputStream(con);
  prop.load(fis);// 将文件加载进流
  String fileName = prop.getProperty("fileName");
  int count = Integer.parseInt(prop.getProperty("fileCount"));
  // 获取目录中的碎片文件
  File[] partFile = dir.listFiles(new SuffixFilter(".part"));
  if (partFile.length != (count-1))
   throw new RuntimeException("碎片文件数量不正确");
  // 创建集合,将碎片文件存储进集合中
  List<FileInputStream> al = new ArrayList<FileInputStream>();
  for (File f : partFile) {
   al.add(new FileInputStream(f)); // 读取碎片文件
  }
  Enumeration<FileInputStream> en = Collections.enumeration(al); // 将集合中的流取出
  SequenceInputStream sis = new SequenceInputStream(en); // 将流合并
  FileOutputStream fos = new FileOutputStream(new File(dir, fileName)); // 目的地
  byte[] buf = new byte[1024 * 1024];
  int len = 0;
  while ((len = sis.read(buf)) != -1) {
   fos.write(buf, 0, len);
  }
  System.out.println("合并文件成功!");
  sis.close();
  fos.close();
}
}

0 个回复

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