2010-11-18 22 views
5

Je travaille sur des documents numériques et des signatures numériques et j'ai trébuché sur un problème.La méthode JAVA ZipFile entries() ne voit pas les répertoires

Entrée: documentX.adoc - fichier zip contenant des fichiers et des dossiers.

Je dois obtenir tout le contenu du fichier d'entrée - une liste de répertoires et de fichiers.

Que dois-je faire:

ZipFile adocFile = new ZipFile(documentXFileName); 
ArrayList <String> adocFiles = new ArrayList<String>(); 
Enumeration <? extends ZipEntry> entries; 
entries = adocFile.entries(); 
for (entries = adocFile.entries(); entries.hasMoreElements();) 
{ 
    adocFiles.add(entries.nextElement().getName()); 
} 

J'ai essayé de créer ArrayList < ZipEntry> et ajouter ZipEntries au lieu de noms - toujours rien. Peut-être qu'il y a un autre moyen? Chose étrange est que ZipEntry a une méthode .isDirectory() ...

Merci pour l'aide, Martin

+0

Avez-vous vérifié le fichier zip pour vous assurer que les répertoires ont bien été créés? – Powerlord

+0

Votre code me semble OK. Peut-être ouvrir le fichier zip (basé sur le nom de fichier donné) dans un outil de fermeture de fichiers externe et juste vérifier que le fichier contient des entrées? Si ça marche, ça pourrait être un problème avec un format que l'implémentation Java ne supporte pas, mais je ne sais vraiment pas ... –

+0

Oui, les répertoires sont là. Je peux parcourir le fichier zip (avec Far Manager), je vois tous les dirs et je peux l'extraire pour voir les dirs aussi. – Brutus

Répondre

8

De l'documentation:

Une entrée de répertoire est défini comme celui dont le nom se termine par un '/'.

Il n'est pas nécessaire de stocker des répertoires dans un fichier ZIP - ce sont des entrées facultatives. Il est possible de stocker une séquence d'octets avec le chemin foo/bar.txt sans une entrée appelée foo. Les outils Zip peuvent donner l'illusion que de telles choses existent dans l'archive même si ce n'est pas le cas.