1

您好,我正在使用 Java 的 zip4j 库将 zip 文件提取到目录中。

我从互联网上得到这个 zip 文件。

一切正常,但是当 zip 文件为空时出现此异常。

12-08 16:52:00.964 29829-30843/ W/System.err: net.lingala.zip4j.exception.ZipException: net.lingala.zip4j.exception.ZipException: java.io.IOException: offset < 0: -20
12-08 16:52:00.964 29829-30843/ W/System.err:     at net.lingala.zip4j.core.HeaderReader.readZip64EndCentralDirLocator(HeaderReader.java:546)
12-08 16:52:00.965 29829-30843/ W/System.err:     at net.lingala.zip4j.core.HeaderReader.readAllHeaders(HeaderReader.java:82)
12-08 16:52:00.965 29829-30843/ W/System.err:     at net.lingala.zip4j.core.ZipFile.readZipInfo(ZipFile.java:425)
12-08 16:52:00.965 29829-30843/ W/System.err:     at net.lingala.zip4j.core.ZipFile.getFileHeaders(ZipFile.java:688)
12-08 16:52:00.965 29829-30843/ W/System.err:     at com.myapp.services.DownloadContentIntentService.onHandleIntent(DownloadContentIntentService.java:124)
12-08 16:52:00.965 29829-30843/ W/System.err:     at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:66)
12-08 16:52:00.965 29829-30843/ W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
12-08 16:52:00.965 29829-30843/ W/System.err:     at android.os.Looper.loop(Looper.java:148)
12-08 16:52:00.965 29829-30843/ W/System.err:     at android.os.HandlerThread.run(HandlerThread.java:61)
12-08 16:52:00.965 29829-30843/ W/System.err: Caused by: net.lingala.zip4j.exception.ZipException: java.io.IOException: offset < 0: -20
12-08 16:52:00.965 29829-30843/ W/System.err:     at net.lingala.zip4j.core.HeaderReader.setFilePointerToReadZip64EndCentralDirLoc(HeaderReader.java:816)
12-08 16:52:00.965 29829-30843/ W/System.err:     at net.lingala.zip4j.core.HeaderReader.readZip64EndCentralDirLocator(HeaderReader.java:517)
12-08 16:52:00.965 29829-30843/ W/System.err:   ... 8 more
12-08 16:52:00.966 29829-30843/ W/System.err: Caused by: java.io.IOException: offset < 0: -20
12-08 16:52:00.966 29829-30843/ W/System.err:     at java.io.RandomAccessFile.seek(RandomAccessFile.java:600)
12-08 16:52:00.966 29829-30843/ W/System.err:     at net.lingala.zip4j.core.HeaderReader.setFilePointerToReadZip64EndCentralDirLoc(HeaderReader.java:814)
12-08 16:52:00.966 29829-30843/ W/System.err:   ... 9 more

这是有问题的线。

 ZipFile zipFile = new ZipFile(temp);

调试时,我发现这只发生在空的 zip 文件中,即里面没有任何东西的存档。

但是我遇到的问题是如何检查存档中的文件数量,因为我发现如果我这样做

 List<FileHeader> fileHeaders = zipFile.getFileHeaders();
 if(fileHeaders != null && fileHeaders.size() > 0){

 }

我能够获取有关 zip 内容的信息,即文件数量和大小等。

但是有一个大问题。异常在这里被抛出

此时抛出异常

 ZipFile zipFile = new ZipFile(temp);

我需要实例来访问文件头

请帮忙

4

1 回答 1

0

zip.isValidZipFile()如果输入文件不包含 zip 条目,API将返回 false。(使用 zip4j v1.3.2 测试)

顺便说一句,新建 ZipFile 对象时不会引发异常。

于 2016-02-07T02:14:04.740 回答