簡體   English   中英

使用Java解壓縮受密碼保護的zip文件會引發NullPointerException

[英]Unzip password protected zip file using Java throws NullPointerException

我需要解壓縮受密碼保護的zip文件。

到目前為止,我在互聯網的幫助下得到了這個,我試圖理解代碼。

但它拋出nullpointerexception。 我真的很困惑 是“孩子”還是其他。 請解釋一下。

unzip2.Unzip2.main(Unzip2.java:27)處的線程“主”中的java.lang.NullPointerException異常C:\\ Users \\ zxc \\ AppData \\ Local \\ NetBeans \\ Cache \\ 8.2 \\ executor-snippets \\ run.xml:53 :Java返回:1 BUILD FAILED(總時間:0秒)

它說它在第27行。

對於(最終文件子級:文件。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");

您需要定義zip文件所在的文件夾,而不是zip文件本身

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

您不需要迭代File處理程序。 在創建ZipFile對象時只需傳遞file對象即可。

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(file);
            if (extensionFilter.accept(file)) {
                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");
        }
    //}

}

簡單,讓我們看一下javadoc

公共File [] listFiles()

返回一個抽象路徑名數組,該數組表示此抽象路徑名表示的目錄中的文件。 如果此抽象路徑名不表示目錄,則此方法返回null。

您提供了一個文件名,並要求它的路徑 文件沒有路徑。 因此返回null,並且for (whatever : null)導致NPE。

因此,這里的重點是:閱讀文檔,而不是盲目地放下一些代碼而不了解該代碼應該做什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM