java.util.zip包提供了用于读取和编写zip和gzip文件格式的类。

在这篇文章中,我们将学习如何使用java.util.zip.ZipInputStreamjava.util.zip.ZipFile解压缩zip文件。

  • ZipInputStream - 此类用于按顺序读取zip条目。
  • ZipFile - 此类在内部使用随机访问文件来读取zip条目。

使用java.util.zip.ZipInputStream解压缩zip文件
下面是一个演示ZipInputStream用法的示例。

文件:UnzipFileExample1.java -

package com.yiibai.tutorial.io;

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;

/**
 * @author yiibai
 */
public class UnzipFileExample1 {
  public static void main(String[] args) {
    File zipFile = new File("Test.zip");
    File output = new File("Unzip");
    FileInputStream fileInputStream = null;
    ZipInputStream zipInputStream = null;
    try {
      fileInputStream = new FileInputStream(zipFile);
      zipInputStream = new ZipInputStream(fileInputStream);

      // Get ZipEntry
      ZipEntry entry = zipInputStream.getNextEntry();
      while (entry != null) {
        if (entry.isDirectory()) {

          // Create directory
          File dir = new File(output, entry.getName());
          if (!dir.exists()) {
            dir.mkdirs();
          }
        } else {

          // Read zipEntry and write to a file.
          File file = new File(output, entry.getName());
          FileOutputStream fileOutputStream = new FileOutputStream(file);
          int i;
          byte[] data = new byte[1024];
          while ((i = zipInputStream.read(data)) != -1) {
            fileOutputStream.write(data, 0, i);
          }

          fileOutputStream.close();

        }
        // Get next entry
        entry = zipInputStream.getNextEntry();
      }

    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      try {
        if (fileInputStream != null) {
          fileInputStream.close();
        }
        if (zipInputStream != null) {
          zipInputStream.close();
        }
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
}

使用java.util.zip.ZipFile解压缩zip文件

以下示例演示了ZipFile的用法。
文件:UnzipFileExample2.java -

package com.yiibai.tutorial.io;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

/**
 * @author yiibai
 */
public class UnzipFileExample2 {
  public static void main(String[] args) {
    File output = new File("Unzip2");
    ZipFile zipFile = null;
    try {

      zipFile = new ZipFile(new File("Test.zip"));

      Enumeration<? extends ZipEntry> entries = zipFile.entries();

      while (entries.hasMoreElements()) {
        ZipEntry entry = (ZipEntry) entries.nextElement();
        if (entry.isDirectory()) {

          // Create directory
          File dir = new File(output, entry.getName());
          if (!dir.exists()) {
            dir.mkdirs();
          }
        } else {

          // Get zipEntry name and create an output stream.
          File file = new File(output, entry.getName());
          FileOutputStream fileOutputStream = new FileOutputStream(file);
          InputStream inputStream = zipFile.getInputStream(entry);

          // Read Zip file entry
          int i;
          byte[] data = new byte[1024];
          while ((i = inputStream.read(data)) != -1) {
            fileOutputStream.write(data, 0, i);
          }

          fileOutputStream.close();
          inputStream.close();
        }
      }
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      try {
        if (zipFile != null) {
          zipFile.close();
        }
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
}