2016-07-19 9 views
1

ich ein Problem treffen, wenn Bibliothek zip4j zipfile in Android zu erzeugen, dann ist hier der Code:Ausnahme beim ZipFile in Android mit Zip4j erstellen: Wahrscheinlich nicht eine Zip-Datei oder eine beschädigte Zip-Datei

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(); 
} 

und ich habe die Ausnahme msg:

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) 

Dieser Code funktioniert perfekt in Eclipse für lokale Dateien, aber in Android funktioniert nicht gut, ich bin ziemlich sicher, dass die Ziel .zip Pfad korrekt ist, und die zip4j Bibliothek Version 1.3. 2.

könnte jemand mir einen Vorschlag geben?

Antwort

0

Ich stieß auf sehr ähnliche Stacktrace. Allerdings verwende ich Java und Zip4j in Version 1.3.2 auf dem Desktop. Ich bin mir nicht sicher, wie meine Antwort für Android relevant ist, aber hier geht es.

Mein stacktrace

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) 

Ich mag dieses das Problem, das ich zu

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

geändert zu beheben

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

verwenden zip4j Der Unterschied ist Files.createTempFile() erzeugt leere Datei und die Datei muss den Konstruktor ZipFile vermasseln. Als ich File mit dem unbelegten Pfad passierte, war das Problem weg.

-1

Ich traf mit der gleichen Frage wegen der verwendeten AES-Verschlüsselung, aber legte nicht die Parameter AES-Datenschlüssel.

enter image description here

+1

Bitte ** [Bearbeiten] ** Ihre Post und zeigen den aktuellen Code als Text anstelle von Screenshots. Andere können Ihre Bilder nicht kopieren und einfügen. [Siehe hier] (https://meta.stackoverflow.com/a/285557/1402846) für Details. Vielen Dank. – Pang