mr923 发表于 2018-11-27 07:15:52

用apache zip包解压缩zip文件

前些天做了一个信息基础考试系统,其中有一步要求客户端从服务器端抽取试题,下载本地,然后用程序解压缩,解压缩完成后,删除zip文件。但是解压后zip文件删除不掉,总是有程序占用,后来经过调试发现几个流对象没有关闭。
   下面给出正确的程序:
// zipFileName为要解压缩的zip为文件名,例:c:\\filename.zip
// outputDirectoty为解压缩后文件名,例:c:\\filename

public void unZip(String zipFileName, String outputDirectory)
      throws Exception {
InputStream in = null;
FileOutputStream out = null;
try {
      zipFile = new ZipFile(zipFileName);
      java.util.Enumeration e = zipFile.getEntries();
      // org.apache.tools.zip.ZipEntry zipEntry = null;
      createDirectory(outputDirectory, "");
      while (e.hasMoreElements()) {
          zipEntry = (ZipEntry) e.nextElement();
          System.out.println("unziping " + zipEntry.getName());
    if (zipEntry.isDirectory()) {
      String name = zipEntry.getName();
      name = name.substring(0, name.length() - 1);
      File f = new File(outputDirectory + File.separator + name);
      f.mkdir();
      System.out.println("创建目录:" + outputDirectory
          + File.separator + name);
    } else {
      String fileName = zipEntry.getName();
      fileName = fileName.replace('\\', '/');
      // System.out.println("测试文件1:" +fileName);
      if (fileName.indexOf("/") != -1) {
      createDirectory(outputDirectory, fileName.substring(0,
      fileName.lastIndexOf("/")));
      fileName = fileName.substring(
      fileName.lastIndexOf("/") + 1, fileName
          .length());
       }
      try {
          f = new File(outputDirectory + File.separator
               + zipEntry.getName());

         in = zipFile.getInputStream(zipEntry);
          out = new FileOutputStream(f);

         byte[] by = new byte;
         int c;
         while ((c = in.read(by)) != -1) {
               out.write(by, 0, c);
         }
         out.flush();
      } catch (Exception ee) {

      } finally {
            if (in != null) {
            in.close();      //解压完成后注意关闭输入流对象
      }
      if (out != null) {
            out.close();      //解压完成后注意关闭输出流对象
      }
    }
}
}
} catch (Exception ex) {
         System.out.println(ex.getMessage());
} finally {
      zipFile.close();      //解压完成后注意关闭apache自带zip流对象
}
}






页: [1]
查看完整版本: 用apache zip包解压缩zip文件