Java使用基本JDK操作ZIP文件(2)

/**
  * 压缩文件或目录到指定ZipOutputStream
  * @param srcFile 指定文件或者目录
  * @param zipOut 指定ZipOutputStream输出流
  * @param ns 文件组织到ZIP文件时的路径
  * @throws IOException
  */
 private static void doZipFile(File srcFile, ZipOutputStream zipOut,
   String ns) throws IOException {
  if (srcFile.isFile()) {
   zipOut.putNextEntry(new ZipEntry(ns + srcFile.getName()));
   InputStream is = FileUtils.openInputStream(srcFile);
   try {
    IOUtils.copy(is, zipOut);
   } catch (Exception e) {
    e.printStackTrace();
   } finally {
    IOUtils.closeQuietly(is);
   }
   return;
  }
  for (File file : srcFile.listFiles()) {
   String entryName = ns + file.getName();

if (file.isDirectory()) {
    entryName += File.separator;
    zipOut.putNextEntry(new ZipEntry(entryName));
   }
   doZipFile(file, zipOut, entryName);
  }
 }
 
 /**
    * 将指定的压缩文件解压到指定的目标目录下.
    * 如果指定的目标目录不存在或其父路径不存在, 将会自动创建.
    *
    * @param zipFile 将会解压的压缩文件
    * @param destFile 解压操作的目录
    */
 public static void unzipFile(String zipFile,String destFile) throws IOException {
  unzipFile(new File(zipFile), new File(destFile));
 }
 
 /**
    * 将指定的压缩文件解压到指定的目标目录下.
    * 如果指定的目标目录不存在或其父路径不存在, 将会自动创建.
    *
    * @param zipFile 将会解压的压缩文件
    * @param destFile 解压操作的目录目录
    */
 public static void unzipFile(File zipFile,File destFile) throws IOException {
  unzipFile(FileUtils.openInputStream(zipFile), destFile);
//  doUnzipFile(new ZipFile(zipFile), destFile);
 }
 
 public static void doUnzipFile(ZipFile zipFile,File dest) throws IOException {
  if (!dest.exists()) {
   FileUtils.forceMkdir(dest);
  }
  Enumeration<ZipEntry> entries = (Enumeration<ZipEntry>) zipFile.entries();
  while (entries.hasMoreElements()) {
   ZipEntry entry = entries.nextElement();
   File file = new File(dest, entry.getName());
   if (entry.getName().endsWith(File.separator)) {
    FileUtils.forceMkdir(file);
   } else {
    OutputStream out = FileUtils.openOutputStream(file);
    InputStream in = zipFile.getInputStream(entry);
    try {
     IOUtils.copy(in, out);
    } catch (Exception e) {
     e.printStackTrace();
    } finally {
     IOUtils.closeQuietly(out);
    }
   }
  }
  zipFile.close();
 }
 
    /**
    * 将指定的输入流解压到指定的目标目录下.
    *
    * @param is 将要解压的输入流
    * @param destFile 解压操作的目标目录
    * @throws IOException
    */ 
 public static void unzipFile(InputStream is,File destFile) throws IOException {
  try {
   if (is instanceof ZipInputStream) {
    doUnzipFile((ZipInputStream) is,destFile);
   } else {
    doUnzipFile(new ZipInputStream(is), destFile);
   }
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   IOUtils.closeQuietly(is);
  }
 }
 
 /**
  *
  * @param zipInput
  * @param dest
  * @throws IOException
  */
 private static void doUnzipFile(ZipInputStream zipInput, File dest)
   throws IOException {
  if (!dest.exists()) {
   FileUtils.forceMkdir(dest);
  }
  for (ZipEntry entry; (entry = zipInput.getNextEntry()) != null;) {
   String entryName = entry.getName();

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/eff433a66b4a57f51b2317306bfc829e.html