如何使用 Java 解压缩目录中所有受密码保护的 zip 文件

蝙蝠侠

我是 Java 新手,正在尝试编写一个程序,该程序将解压缩目录中所有受密码保护的 zip 文件,我能够解压缩所有普通 zip 文件(无密码),但我不确定如何解压缩受密码保护的文件。注意:所有 zip 文件都有相同的密码

import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.model.FileHeader;

import java.util.zip.*;

public class Extraction {
    // public Extraction() {
    //
    // try {
    //
    // ZipFile zipFile = new
    // ZipFile("C:\\Users\\Desktop\\ZipFile\\myzip.zip");
    //
    // if (zipFile.isEncrypted()) {
    //
    // zipFile.setPassword("CLAIMS!");
    // }
    //
    // List fileHeaderList = zipFile.getFileHeaders();
    //
    // for (int i = 0; i < fileHeaderList.size(); i++) {
    // FileHeader fileHeader = (FileHeader) fileHeaderList.get(i);
    //
    // zipFile.extractFile(fileHeader, "C:\\Users\\Desktop\\ZipFile");
    // System.out.println("Extracted");
    // }
    //
    // } catch (Exception e) {
    // System.out.println("Please Try Again");
    // }
    //
    // }
    //
    // public static void main(String[] args) {
    // new Extraction();
    //
    // }
    // }

    public static void main(String[] args) {
        Extraction unzipper = new Extraction();
        unzipper.unzipZipsInDirTo(Paths.get("C:\\Users\\Desktop\\ZipFile"),
                Paths.get("C:\\Users\\Desktop\\ZipFile\\Unziped"));

    }

    public void unzipZipsInDirTo(Path searchDir, Path unzipTo) {

        final PathMatcher matcher = searchDir.getFileSystem().getPathMatcher("glob:**/*.zip");
        try (final Stream<Path> stream = Files.list(searchDir)) {
            stream.filter(matcher::matches).forEach(zipFile -> unzip(zipFile, unzipTo));
        } catch (Exception e) {
            System.out.println("Something went wrong, Please try again!!");
        }
    }

    public void unzip(Path zipFile, Path outputPath) {
        try (ZipInputStream zis = new ZipInputStream(Files.newInputStream(zipFile))) {

            ZipEntry entry = zis.getNextEntry();

            while (entry != null) {

                Path newFilePath = outputPath.resolve(entry.getName());
                if (entry.isDirectory()) {
                    Files.createDirectories(newFilePath);
                } else {
                    if (!Files.exists(newFilePath.getParent())) {
                        Files.createDirectories(newFilePath.getParent());
                    }
                    try (OutputStream bos = Files.newOutputStream(outputPath.resolve(newFilePath))) {
                        byte[] buffer = new byte[Math.toIntExact(entry.getSize())];

                        int location;

                        while ((location = zis.read(buffer)) != -1) {
                            bos.write(buffer, 0, location);
                        }
                    }
                }
                entry = zis.getNextEntry();
            }
        } catch (Exception e1) {
            System.out.println("Please try again");
        }
    }

}
蝙蝠侠

谢谢你们,虽然没有人回答我的问题。我找到了我发布的答案,因为可能还有其他人可能正在寻找类似的答案。

import java.io.File;
import java.util.List;

import javax.swing.filechooser.FileNameExtensionFilter;

import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.model.FileHeader;

public class SamExtraction {

    public static void main(String[] args) {

        final FileNameExtensionFilter extensionFilter = new FileNameExtensionFilter("N/A", "zip");
        //Folder where zip file is present
        final File file = new File("C:/Users/Desktop/ZipFile");
        for (final File child : file.listFiles()) {
            try {
                ZipFile zipFile = new ZipFile(child);
                if (extensionFilter.accept(child)) {
                    if (zipFile.isEncrypted()) {
                        //Your ZIP password
                        zipFile.setPassword("MYPASS!");
                    }
                    List fileHeaderList = zipFile.getFileHeaders();

                    for (int i = 0; i < fileHeaderList.size(); i++) {
                        FileHeader fileHeader = (FileHeader) fileHeaderList.get(i);
                        //Path where you want to Extract
                        zipFile.extractFile(fileHeader, "C:/Users/Desktop/ZipFile");
                        System.out.println("Extracted");
                    }
                }
            } catch (Exception e) {
                System.out.println("Please Try Again");
            }
        }

    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用终端解压缩受密码保护的.zip文件?

来自分类Dev

为什么python无法使用zip方法解压缩winrar创建的受密码保护的zip文件?

来自分类Dev

java-如何解压缩zip文件的特定目录中的所有文件?

来自分类Dev

如何在不使用其他zip工具的情况下使批处理脚本解压缩受密码保护的.zip文件?

来自分类Dev

在R中解压缩受密码保护的zip文件

来自分类Dev

如何使用Java下载和解压缩ZIP文件

来自分类Dev

受密码保护的.zip解压缩到空文件夹(不提示输入密码)

来自分类Dev

如何解压缩我的子目录中的所有 zip 文件夹?

来自分类Dev

如何提取使用Python中的PKWARE SecureZip压缩的受密码保护的zip文件?(Windows 10)

来自分类Dev

使用JAVA ZipFile类解压缩Zip文件

来自分类Dev

使用JAVA ZipFile类解压缩Zip文件

来自分类Dev

自动从Azure存储中解压缩密码保护的Zip文件吗?

来自分类Dev

瓦拉:如何在不解压缩的情况下检索zip存档中所有文件的名称?

来自分类Dev

受密码保护的zip文件的安全性如何?

来自分类Dev

在vbsript中解压缩受密码保护的文件

来自分类Dev

如何“解压缩” zip文件?

来自分类Dev

如何解压缩“ .zip”文件?

来自分类Dev

如何从终端解压缩zip文件?

来自分类Dev

使用Swift解压缩zip文件

来自分类Dev

AS3:如何检查是否已解压缩所有zip文件?

来自分类Dev

解压缩ZIP文件,然后解压缩所有子ZIP文件

来自分类Dev

如何使用Scala解压缩zip文件?

来自分类Dev

如何使用nodejs上传zip文件并解压缩?

来自分类Dev

如何解压缩所有在某个特定目录中的许多子目录中找到的许多zip文件

来自分类Dev

Java:如何以低内存使用率解压缩文件(zip 或 tar.gz)?

来自分类Dev

使用CMD行中的7zip解压缩文件夹中的所有文件

来自分类Dev

在Java中无需解压缩即可替换Zip文件

来自分类Dev

如何使用Gulp Zip压缩zip文件

来自分类Dev

使用Java读取受密码保护的Excel文件(.xlsx)

Related 相关文章

  1. 1

    如何使用终端解压缩受密码保护的.zip文件?

  2. 2

    为什么python无法使用zip方法解压缩winrar创建的受密码保护的zip文件?

  3. 3

    java-如何解压缩zip文件的特定目录中的所有文件?

  4. 4

    如何在不使用其他zip工具的情况下使批处理脚本解压缩受密码保护的.zip文件?

  5. 5

    在R中解压缩受密码保护的zip文件

  6. 6

    如何使用Java下载和解压缩ZIP文件

  7. 7

    受密码保护的.zip解压缩到空文件夹(不提示输入密码)

  8. 8

    如何解压缩我的子目录中的所有 zip 文件夹?

  9. 9

    如何提取使用Python中的PKWARE SecureZip压缩的受密码保护的zip文件?(Windows 10)

  10. 10

    使用JAVA ZipFile类解压缩Zip文件

  11. 11

    使用JAVA ZipFile类解压缩Zip文件

  12. 12

    自动从Azure存储中解压缩密码保护的Zip文件吗?

  13. 13

    瓦拉:如何在不解压缩的情况下检索zip存档中所有文件的名称?

  14. 14

    受密码保护的zip文件的安全性如何?

  15. 15

    在vbsript中解压缩受密码保护的文件

  16. 16

    如何“解压缩” zip文件?

  17. 17

    如何解压缩“ .zip”文件?

  18. 18

    如何从终端解压缩zip文件?

  19. 19

    使用Swift解压缩zip文件

  20. 20

    AS3:如何检查是否已解压缩所有zip文件?

  21. 21

    解压缩ZIP文件,然后解压缩所有子ZIP文件

  22. 22

    如何使用Scala解压缩zip文件?

  23. 23

    如何使用nodejs上传zip文件并解压缩?

  24. 24

    如何解压缩所有在某个特定目录中的许多子目录中找到的许多zip文件

  25. 25

    Java:如何以低内存使用率解压缩文件(zip 或 tar.gz)?

  26. 26

    使用CMD行中的7zip解压缩文件夹中的所有文件

  27. 27

    在Java中无需解压缩即可替换Zip文件

  28. 28

    如何使用Gulp Zip压缩zip文件

  29. 29

    使用Java读取受密码保护的Excel文件(.xlsx)

热门标签

归档