在Android中使用Zip4j创建zipFile时发生异常:可能不是zip文件或损坏的zip文件 [英] Exception when create zipFile in Android with Zip4j: Probably not a zip file or a corrupted zip file

查看:1471
本文介绍了在Android中使用Zip4j创建zipFile时发生异常:可能不是zip文件或损坏的zip文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在android中使用zip4j库生成zipfile时遇到问题,这是代码:

I meet a problem when using zip4j library to generate zipfile in android, here's the code :

try {
    ZipFile zipFile = new ZipFile(dest);
    zipFile.setFileNameCharset("GBK");
    if (srcFile.isDirectory()) {
        zipFile.addFolder(srcFile, parameters);
    } else {
        zipFile.addFile(srcFile, parameters);
    }
} catch (Exception e) {
    e.printStackTrace();
}

我得到了异常味精:

    net.lingala.zip4j.exception.ZipException: Probably not a zip file or a corrupted zip file
    at net.lingala.zip4j.core.HeaderReader.readEndOfCentralDirectoryRecord(HeaderReader.java:179)
    at net.lingala.zip4j.core.HeaderReader.readAllHeaders(HeaderReader.java:78)
    at net.lingala.zip4j.core.ZipFile.readZipInfo(ZipFile.java:425)
    at net.lingala.zip4j.core.ZipFile.checkZipModel(ZipFile.java:935)
    at net.lingala.zip4j.core.ZipFile.addFiles(ZipFile.java:263)
    at net.lingala.zip4j.core.ZipFile.addFile(ZipFile.java:250)
Caused by: java.io.IOException: Negative seek offset
    at java.io.RandomAccessFile.seek(RandomAccessFile.java:555)
    at net.lingala.zip4j.core.HeaderReader.readEndOfCentralDirectoryRecord(HeaderReader.java:117)

此代码在Eclipse中对于本地文件来说是完美的,但在Android中效果不佳,我很确定目标.zip路径正确,并且zip4j库版本为1.3.2.

This code works perfect in Eclipse for local files, but does not work well in Android, I'm pretty sure the destination .zip path is correct, and the zip4j library version is 1.3.2.

有人可以给我任何建议吗?

could anyone give me any suggestion?

推荐答案

我遇到了非常相似的stacktrace.但是,我在桌面上使用Java和zip4j(版本1.3.2).我不确定我的答案与android有什么关系,但是就可以了.

I came across very similar stacktrace. However, I use java and zip4j in version 1.3.2 on desktop. I am not sure how my answer is relevant to android but here it goes.

我的堆栈跟踪

Caused by: net.lingala.zip4j.exception.ZipException: Probably not a zip file or a corrupted zip file
        at net.lingala.zip4j.core.HeaderReader.readEndOfCentralDirectoryRecord(HeaderReader.java:179)
        at net.lingala.zip4j.core.HeaderReader.readAllHeaders(HeaderReader.java:78)
        at net.lingala.zip4j.core.ZipFile.readZipInfo(ZipFile.java:425)
        at net.lingala.zip4j.core.ZipFile.checkZipModel(ZipFile.java:935)
        at net.lingala.zip4j.core.ZipFile.addFolder(ZipFile.java:343)
        at net.lingala.zip4j.core.ZipFile.addFolder(ZipFile.java:330)
Caused by: java.io.IOException: Negative seek offset
        at java.io.RandomAccessFile.seek(RandomAccessFile.java:555)
        at net.lingala.zip4j.core.HeaderReader.readEndOfCentralDirectoryRecord(HeaderReader.java:117)
        at net.lingala.zip4j.core.HeaderReader.readAllHeaders(HeaderReader.java:78)

我这样使用zip4j

I use zip4j like this

Path destination = Files.createTempFile("export", ".zip");
ZipFile zip = new ZipFile(destination.toFile());

要解决我更改为的问题

File destination = new File(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString());
ZipFile zip = new ZipFile(destination);

区别在于Files.createTempFile()创建空文件,并且该文件必须破坏ZipFile的构造函数.当我用空路径通过File时,问题就消失了.

The difference is Files.createTempFile() creates empty file and the file must screw up ZipFile's constructor. When I passed File with unoccupied path, the problem was gone.

这篇关于在Android中使用Zip4j创建zipFile时发生异常:可能不是zip文件或损坏的zip文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆