ZipInputStream getNextEntry est null lors de l'extraction .les fichiers zip
J'essaie de l'extraire .les fichiers zip et je suis en utilisant ce code:
String zipFile = Path + FileName;
FileInputStream fin = new FileInputStream(zipFile);
ZipInputStream zin = new ZipInputStream(fin);
ZipEntry ze = null;
while ((ze = zin.getNextEntry()) != null) {
UnzipCounter++;
if (ze.isDirectory()) {
dirChecker(ze.getName());
} else {
FileOutputStream fout = new FileOutputStream(Path
+ ze.getName());
while ((Unziplength = zin.read(Unzipbuffer)) > 0) {
fout.write(Unzipbuffer, 0, Unziplength);
}
zin.closeEntry();
fout.close();
}
}
zin.close();
mais le problème est que, pendant le débogage, lorsque le code atteint le while(!=null) partie, le zin.getNextEntry() est toujours nulle, de sorte qu'il ne marche pas extraire quoi que ce soit..
L' .le fichier zip est 150 ko.. Comment puis-je résoudre ce problème?
L' .zip existe
Code que j'utilise pour dl le .zip:
URL=intent.getStringExtra("DownloadService_URL");
FileName=intent.getStringExtra("DownloadService_FILENAME");
Path=intent.getStringExtra("DownloadService_PATH");
File PathChecker = new File(Path);
try{
if(!PathChecker.isDirectory())
PathChecker.mkdirs();
URL url = new URL(URL);
URLConnection conexion = url.openConnection();
conexion.connect();
int lenghtOfFile = conexion.getContentLength();
lenghtOfFile/=100;
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(Path+FileName);
byte data[] = new byte[1024];
long total = 0;
int count = 0;
while ((count = input.read(data)) != -1) {
output.write(data, 0, count);
total += count;
notification.setLatestEventInfo(context, contentTitle, "جاري تحميل ملف " + FileName + " " + (total/lenghtOfFile), contentIntent);
mNotificationManager.notify(1, notification);
}
output.flush();
output.close();
input.close();
Sonne comme
complètement impossible avec ce code, il aurait jeté une IOException à new FileInputStream.
Veuillez utiliser camelCase pour les noms d'attribut dans la source posté dans les forums publics.
zipFile
peut ne pas exister. Vérifiez Path
et FileName
pour s'assurer qu'ils sont corrects.complètement impossible avec ce code, il aurait jeté une IOException à new FileInputStream.
Veuillez utiliser camelCase pour les noms d'attribut dans la source posté dans les forums publics.
OriginalL'auteur Omar | 2011-09-26
Vous devez vous connecter pour publier un commentaire.
Si le Zip est placé dans le même répertoire que cette source exacte, nommé "91.zip", il fonctionne très bien.
BTW
File
constructeur qui prend deuxString
arguments, d'insérer le bon séparateur automatiquement.Thompson: stackoverflow.com/a/13911232/1495442
OriginalL'auteur Andrew Thompson
Vous pourriez avoir couru dans le problème suivant, qui se produit lors de la lecture des fichiers zip en utilisant un ZipInputStream: les fichiers Zip contiennent des entrées supplémentaires et de la structure de l'information dans une séquence. En outre, ils contiennent un registre de toutes les entrées à la fin (!) de le fichier. Seulement ce registre fournit des informations complètes sur le bon fichier zip de la structure. Par conséquent, la lecture d'un fichier zip dans une séquence, à l'aide d'un ruisseau, aboutit parfois à une "conjecture", qui peut échouer. C'est un problème commun de tous les zip des mises en œuvre, non seulement pour java.util.zip. Une meilleure approche est d'utiliser ZipFile, qui détermine la structure de la base de registre à la fin du fichier. Vous voudrez peut-être lire http://commons.apache.org/compress/zip.html, qui raconte un peu plus de détails.
OriginalL'auteur Harry
Essayez ce code:-
OriginalL'auteur jagdish
Ce code fonctionne très bien pour moi. Peut-être vous avez besoin de vérifier que le zipFile Chaîne est valide?
produit des résultats valides sur un 3.3 Mo fichier zip.
OriginalL'auteur Eric Lindauer
Ce code semble fonctionner correctement pour moi.
Êtes-vous sûr que votre fichier zip est valable un fichier zip? Si le fichier n'existe pas ou n'est pas lisible, alors vous obtiendrez un FileNotFoundException, mais si le fichier est vide ou n'est pas valide d'un fichier zip, puis vous obtiendrez ze == null.
Le zip que vous spécifiez n'est pas valide d'un fichier zip. La taille de l'entrée est 4294967295
Cela donne:
Essayer votre code postal valide fichier.
"je viens de retéléchargé le zip.." 1) Le net est une grande place. Soins pour partager une URL? 2) Java ne comprend certains types de compression Zip.
tinyurl.com/5udabdl .. j'ai édité la question avec le code que j'ai utilisé pour dl le .zip .. j'ai zippé le .zip fichiers avec une application en C# j'ai écrit
Avez-vous essayer le .zip? Merci.
J'ai essayé avec un autre zip j'ai créé manuellement et cela a fonctionné.. j'ai posté le code que j'utilise en C#, vous pouvez voir ce qui va pas: stackoverflow.com/questions/7587207/...
OriginalL'auteur Matthew Farwell