java - 使用 Java 解压缩受密码保护的 zip 文件抛出 NullPointerException

标签 java zip4j

我需要解压缩受密码保护的 zip 文件。

到目前为止,我是在互联网的帮助下得到这个的,我正在努力理解代码。

但它会抛出 nullpointerexception。我真的很困惑。是“ child ”吗 或者是其他东西。请解释一下。

Exception in thread "main" java.lang.NullPointerException at unzip2.Unzip2.main(Unzip2.java:27) C:\Users\zxc\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1 BUILD FAILED (total time: 0 seconds)

它说它在第 27 行。

for (final File child : file. listFiles()) {

据我所知,nullpointerexception 意味着我的变量为 null,但我不知道这里的 null 在哪里以及如何修复它

这是我的完整代码。请赐教。

 /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    package unzip2;
    /**
     *
     * @author zxc
     */
    import java.io.File;
    import java.util.List;

    import javax.swing.filechooser.FileNameExtensionFilter;

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

    public class Unzip2 {

        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/zxc/Desktop/ziptest/ziptest2.zip");
            for (final File child : file.listFiles()) {
                try {
                    ZipFile zipFile;
                    zipFile = new ZipFile(child);
                    if (extensionFilter.accept(child)) {
                        if (zipFile.isEncrypted()) {
                            //Your ZIP password
                            zipFile.setPassword("password");
                        }
                        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/zxc/Desktop/zipfile");
                            System.out.println("Extracted");
                        }
                    }
                } catch (ZipException e) {
                    System.out.println("Please Try Again");
                }
            }

        }
    }

最佳答案

答案是你的 File 实例上面的一行

//Folder where zip file is present
final File file = new File("C:/Users/zxc/Desktop/ziptest/ziptest2.zip");

您需要定义压缩文件所在的文件夹,而不是压缩文件本身

final File file = new File("C:/Users/zxc/Desktop/ziptest");

关于java - 使用 Java 解压缩受密码保护的 zip 文件抛出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50323784/

相关文章:

java - 为什么在 Java 中阻止 block 的迭代?

Java Derby 数据库删除表中的所有行

java - 如何在 Guice 中使用@SessionScoped

java - 如何更改 JList d'n'd 目标指示器

java - 坚果错误 : JAVA_HOME is not set

java - 使用 zip4j 创建 zip 时保留文件权限

java - 从 zipFile 获取 inputStream 然后添加到另一个 zipFile 获取空指针异常

java - 使用 while 循环报告进度和完成情况是否正确?

java - 无法使用 zip4j 在 java 中创建 zip 文件