Java解压缩文件示例

时间:2020-02-23 14:34:35  来源:igfitidea点击:

欢迎使用Java解压缩文件示例。
在上一篇文章中,我们学习了如何在Java中压缩文件和目录,这里我们将从目录创建的相同zip文件解压缩到另一个输出目录。

Java解压缩文件

要解压缩一个zip文件,我们需要使用ZipInputStream读取该zip文件,然后逐个读取所有ZipEntry
然后使用FileOutputStream将它们写入文件系统。

如果输出目录不存在,并且zip文件中存在任何嵌套目录,我们还需要创建该目录。

这是一个Java解压缩文件程序,它将先前创建的tmp.zip解压缩到输出目录。

package com.theitroad.files;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class UnzipFiles {

  public static void main(String[] args) {
      String zipFilePath = "/Users/hyman/tmp.zip";
      
      String destDir = "/Users/hyman/output";
      
      unzip(zipFilePath, destDir);
  }

  private static void unzip(String zipFilePath, String destDir) {
      File dir = new File(destDir);
      //create output directory if it doesn't exist
      if(!dir.exists()) dir.mkdirs();
      FileInputStream fis;
      //buffer for read and write data to file
      byte[] buffer = new byte[1024];
      try {
          fis = new FileInputStream(zipFilePath);
          ZipInputStream zis = new ZipInputStream(fis);
          ZipEntry ze = zis.getNextEntry();
          while(ze != null){
              String fileName = ze.getName();
              File newFile = new File(destDir + File.separator + fileName);
              System.out.println("Unzipping to "+newFile.getAbsolutePath());
              //create directories for sub directories in zip
              new File(newFile.getParent()).mkdirs();
              FileOutputStream fos = new FileOutputStream(newFile);
              int len;
              while ((len = zis.read(buffer)) > 0) {
              fos.write(buffer, 0, len);
              }
              fos.close();
              //close this ZipEntry
              zis.closeEntry();
              ze = zis.getNextEntry();
          }
          //close last ZipEntry
          zis.closeEntry();
          zis.close();
          fis.close();
      } catch (IOException e) {
          e.printStackTrace();
      }
      
  }

}

程序完成后,我们将所有zip文件内容存储在具有相同目录层次结构的输出文件夹中。

上面程序的输出是:

Unzipping to /Users/hyman/output/.DS_Store
Unzipping to /Users/hyman/output/data/data.dat
Unzipping to /Users/hyman/output/data/data.xml
Unzipping to /Users/hyman/output/data/xmls/project.xml
Unzipping to /Users/hyman/output/data/xmls/web.xml
Unzipping to /Users/hyman/output/data.Xml
Unzipping to /Users/hyman/output/DB.xml
Unzipping to /Users/hyman/output/item.XML
Unzipping to /Users/hyman/output/item.xsd
Unzipping to /Users/hyman/output/ms/data.txt
Unzipping to /Users/hyman/output/ms/project.doc