0

我正在尝试使用 java 解压缩文件,但以下代码没有进入 while 循环,因为 'ze' 为空。但是,我可以使用 7zip 应用程序解压缩同一个文件。有人可以让我知道为什么会这样吗?

尝试{

        //get the zip file content
        ZipInputStream zis = 
            new ZipInputStream(new FileInputStream(zipFile));
        //get the zipped file list entry
        ZipEntry ze = zis.getNextEntry();

        while(ze!=null){

           String fileName = ze.getName();
           File newFile = new File(outputFolder + File.separator + fileName);

           System.out.println("file unzip : "+ newFile.getAbsoluteFile());

            //create all non exists folders
            //else you will hit FileNotFoundException for compressed folder
            new File(newFile.getParent()).mkdirs();

            FileOutputStream fos = new FileOutputStream(newFile);             

            int len;
            while ((len = zis.read(buffer)) > 0) {
            fos.write(buffer, 0, len);
            }

            fos.close();   
            ze = zis.getNextEntry();
        }

        zis.closeEntry();
        zis.close();

        System.out.println("Done");

    }catch(IOException ex){
       ex.printStackTrace(); 
    }
4

1 回答 1

1

这里的 javadocs:https ://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipInputStream.html 说如果没有更多条目, getNextEntry() 将返回 null。检查您的 zip 文件中是否实际包含文件或是否为空。

我使用包含文件的 zip 尝试了您的代码,并且它运行正确。我用一个空的 zip 文件进行了尝试,空文件的 ze 为空,因此它没有进入 while 循环。

于 2016-04-08T00:32:39.857 回答