Mic*_*Mic 2 java zip android exception 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();
}
Run Code Online (Sandbox Code Playgroud)
我得到了异常消息:
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)
Run Code Online (Sandbox Code Playgroud)
这段代码在 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)
Run Code Online (Sandbox Code Playgroud)
我像这样使用 zip4j
Path destination = Files.createTempFile("export", ".zip");
ZipFile zip = new ZipFile(destination.toFile());
Run Code Online (Sandbox Code Playgroud)
为了解决我改成的问题
File destination = new File(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString());
ZipFile zip = new ZipFile(destination);
Run Code Online (Sandbox Code Playgroud)
不同之处在于 Files.createTempFile() 创建空文件并且文件必须搞砸ZipFile的构造函数。当我File以未占用的路径通过时,问题就消失了。
| 归档时间: |
|
| 查看次数: |
5006 次 |
| 最近记录: |