2 u011225133 u011225133 于 2014.06.09 10:42 提问

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

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

2个回答

qq_20704799
qq_20704799   2015.03.20 10:31

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

u012487115
u012487115   2016.05.11 15:45

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!