2010-11-18 13 views
5

Ich arbeite an digitalen Dokumenten und digitalen Signaturen und ich bin auf ein Problem gestoßen.JAVA ZipFile Einträge() -Methode sieht keine Verzeichnisse

Eingabe: documentX.adoc - zip-Datei mit Dateien und Ordnern darin.

Ich brauche den gesamten Inhalt in der Eingabedatei - eine Liste von Verzeichnissen und Dateien.

Was kann ich tun:

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

Ich habe versucht, Arraylist < ZipEntry erstellen> und ZipEntries statt Namen hinzufügen - immer noch nichts. Vielleicht gibt es einen anderen Weg? Merkwürdige ist, dass ZipEntry ein .isDirectory() -Methode hat ...

Vielen Dank für Hilfe, Martin

+0

Haben Sie die ZIP-Datei überprüft, um sicherzustellen, dass die Verzeichnisse tatsächlich darin erstellt wurden? – Powerlord

+0

Ihr Code sieht für mich OK aus. Vielleicht öffnen Sie die Zip-Datei (basierend auf dem angegebenen Dateinamen) in einem externen Zip-Tool und überprüfen Sie einfach, dass die Datei Einträge enthält? Wenn das funktioniert, könnte es ein Problem mit einem Format sein, das die Java-Implementierung nicht unterstützt, aber ich weiß wirklich nicht ... –

+0

Ja, die Verzeichnisse sind da. Ich kann zip-Datei (mit Far Manager) durchsuchen, ich sehe alle Verzeichnisse und ich kann es extrahieren, um die Verzeichnisse zu sehen. – Brutus

Antwort

8

Vom documentation:

Ein Verzeichniseintrag definiert ist, der zu sein Name endet mit einem '/'.

Es ist nicht notwendig, Verzeichnisse in einer ZIP-Datei zu speichern - sie sind optionale Einträge. Es ist möglich, eine Bytefolge mit dem Pfad foo/bar.txt ohne einen Eintrag foo zu speichern. Zip-Tools können die Illusion vermitteln, dass solche Dinge innerhalb des Archivs existieren, auch wenn dies nicht der Fall ist.