ZipInputStreamd的解压问题,getNextEntry()

public static void unzipFile(File zip,String directory) throws Exception
{
try{

         java.util.zip.ZipInputStream zis = new java.util.zip.ZipInputStream(new FileInputStream(zip));
         java.util.zip.ZipEntry ze = (java.util.zip.ZipEntry) zis.getNextEntry();
         File parent = new File(directory);
         if (!parent.exists() && !parent.mkdirs()){
             throw new Exception("创建解压目录 \"" + parent.getAbsolutePath() + "\" 失败");
         }
         while (ze != null){
             String name = ze.getName();
             File child = new File(parent, name);
             FileOutputStream output = new  FileOutputStream(child);
             byte[] buffer = new byte[10240];
             int bytesRead = 0;
             while ((bytesRead = zis.read(buffer)) > 0){
                 output.write(buffer, 0, bytesRead);
             }
             output.flush();
             output.close();
             ze = (java.util.zip.ZipEntry) zis.getNextEntry();
         }
         zis.close();
     }catch (IOException e){
        e.printStackTrace();
     }
 }

为什么zis.getNextEntry()这二个地方获取对象就报错。
java.lang.IllegalArgumentException
at java.util.zip.ZipInputStream.getUTF8String(ZipInputStream.java:301)
at java.util.zip.ZipInputStream.readLOC(ZipInputStream.java:247)
at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:74)
at com.minxinloan.black.web.utils.Test.unzipFile(Test.java:110)
at com.minxinloan.black.web.utils.Test.main(Test.java:85

如果压缩文件下面有文件夹就报这个错误,没有文件夹直接是文件就不报错误。这是为什么。有点着急。

我也遇到这个问题,用zip4j能解决这个问题!

name有可能是目录,也有可能是文件,要做区分的