java - 使用 Zip4j : Probably not a zip file or a corrupted zip file 在 Android 中创建 zipFile 时出现异常

标签 java android exception zip zip4j

我在 android 中使用 zip4j 库生成 zipfile 时遇到问题,代码如下:

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。

谁能给我一些建议?

最佳答案

我遇到了非常相似的堆栈跟踪。但是,我在桌面上使用 1.3.2 版的 java 和 zip4j。我不确定我的答案与 Android 有什么关系,但就是这样。

我的堆栈跟踪

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的

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 时,问题就消失了。

关于java - 使用 Zip4j : Probably not a zip file or a corrupted zip file 在 Android 中创建 zipFile 时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38455387/

相关文章:

java - 文本中 "marking up"URL 和主题标签的快速方法

java - 如何记录错误级别为ERROR的消息

java - 尝试使用 ESAPI 但出现错误

java - 修改xml中特定标签的值

java - Oracle 存储过程自动化

java - try-catch 和 throws Exception 在性能方面有什么区别?

java - 正确抛出和捕获异常

android - MediaStore.Playlists.Members.moveItem 的替代品

安卓 TextView : Change Text Color on click

android studio点击activity1中的button1加载activity2 webview