Zip4j libary:如何检查zip文件是否为空?

时间:2015-12-08 16:59:41

标签: java android zip4j

您好我正在使用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);

我需要实例来访问文件头

请帮忙

1 个答案:

答案 0 :(得分:0)

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

BTW,新的ZipFile对象不会抛出异常。

相关问题