Java 解压带密码的 ZIP 包

随着文件传输和存储的需求不断增加,ZIP 格式文件成为了日常工作中不可或缺的一部分。当你遇到一个带密码的 ZIP 文件时,你可能会需要使用 Java 来解压它。本文将介绍如何利用 Java 解压带密码的 ZIP 包,并提供示例代码。

理解 ZIP 文件

ZIP 是一种文件格式,用于将多个文件压缩成一个文件,便于存储和传输。带密码的 ZIP 文件通过加密机制保护内容,只有输入正确的密码才能访问其中的文件。

Java 解压 ZIP 包的主要类

解压 ZIP 文件的主要 Java 类包括:

  • java.util.zip.ZipInputStream: 用于读取 ZIP 文件。
  • java.util.zip.ZipEntry: 表示 ZIP 文件中的一个条目。
  • java.io.FileOutputStream: 用于写入解压后的文件。

准备工作

在开始之前,你需要添加 Apache Commons Compress 库来处理带密码的 ZIP 文件。可以在 Maven 项目中添加以下依赖:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.21</version>
</dependency>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

解压带密码的 ZIP 示例代码

以下是一个使用 Java 解压带密码 ZIP 文件的示例代码:

import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipFile;
import org.apache.commons.compress.utils.IOUtils;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Enumeration;

public class ZipExtractor {

    private String zipFilePath;
    private String destDir;
    private String password;

    public ZipExtractor(String zipFilePath, String destDir, String password) {
        this.zipFilePath = zipFilePath;
        this.destDir = destDir;
        this.password = password;
    }

    public void extract() throws IOException {
        File dir = new File(destDir);
        if (!dir.exists()) {
            dir.mkdirs();
        }

        try (ZipFile zipFile = new ZipFile(zipFilePath, password.getBytes(StandardCharsets.UTF_8))) {
            Enumeration<? extends ZipArchiveEntry> entries = zipFile.getEntries();
            while (entries.hasMoreElements()) {
                ZipArchiveEntry entry = entries.nextElement();
                File entryFile = new File(destDir, entry.getName());
                if (entry.isDirectory()) {
                    entryFile.mkdirs();
                } else {
                    try (InputStream is = zipFile.getInputStream(entry);
                         FileOutputStream fos = new FileOutputStream(entryFile)) {
                        IOUtils.copy(is, fos);
                    }
                }
            }
        }
    }

    public static void main(String[] args) {
        ZipExtractor extractor = new ZipExtractor("path/to/encrypted.zip", "output/directory", "your-password");
        try {
            extractor.extract();
            System.out.println("解压完成!"); 
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.

在上面的代码中,我们定义了一个 ZipExtractor 类,用于处理 ZIP 文件的解压。构造函数接收 ZIP 文件路径、解压目录和密码,extract 方法则执行解压操作。

类图

ZipExtractor -String zipFilePath -String destDir -String password +ZipExtractor(String zipFilePath, String destDir, String password) +void extract()

结论

在本文中,我们介绍了如何使用 Java 解压带密码的 ZIP 文件。通过 Apache Commons Compress 库,使得操作简洁而高效。利用 ZipExtractor 类,我们可以轻松解压加密文件,只需提供文件路径和密码。希望本文能够帮助你顺利解压 ZIP 文件,为你的工作和学习提供便利。