黑马程序员技术交流社区

标题: 为什么合并的结果为1KB? [打印本页]

作者: 金肖    时间: 2012-5-9 01:51
标题: 为什么合并的结果为1KB?
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();
}
}





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