Listen Sie ZIP-Verzeichnisse auf, ohne sie zu extrahieren

Ich baue einen Datei-Explorer in Java und lese die Dateien / Ordner in JTrees auf. Was ich jetzt versuche, ist, wenn ich zu einem gezippten Ordner komme, den ich seinen Inhalt auflisten möchte, aber ohne es zuerst zu extrahieren.

Wenn jemand eine Idee hat, bitte teilen.

Ich schlage vor, Sie schauen sich ZipFile.entries() .

Hier ist ein Code:

 try (ZipFile zipFile = new ZipFile("test.zip")) { Enumeration zipEntries = zipFile.entries(); while (zipEntries.hasMoreElements()) { String fileName = ((ZipEntry) zipEntries.nextElement()).getName(); System.out.println(fileName); } } 

Wenn Sie Java 8 verwenden , können Sie die Verwendung der fast veralteten Enumeration class mit ZipFile::stream folgendermaßen vermeiden:

 zipFile.stream() .map(ZipEntry::getName) .forEach(System.out::println); 

Wenn Sie wissen ZipEntry.isDirectory , ob ein Eintrag ein Verzeichnis ist oder nicht, können Sie ZipEntry.isDirectory . Sie können nicht viel mehr Informationen erhalten als ohne die Datei zu extrahieren (aus offensichtlichen Gründen).


Wenn Sie das Extrahieren aller Dateien vermeiden möchten , können Sie jeweils eine Datei mit ZipFile.getInputStream für jeden ZipEntry . (Beachten Sie, dass Sie die entpackten Daten nicht auf der Festplatte speichern müssen. Sie können einfach den Eingabestream lesen und die Bytes vercasting, während Sie fortfahren.

Verwenden Sie die class java.util.zip.ZipFile und insbesondere ihre Methode entries .

Du wirst so etwas haben:

 ZipFile zipFile = new ZipFile("testfile.zip"); Enumeration zipEntries = zipFile.entries(); String fname; while (zipEntries.hasMoreElements()) { fname = ((ZipEntry)zipEntries.nextElement()).getName(); ... } 

Zur Bearbeitung von ZIP-Dateien können Sie die class ZipFile verwenden . Es hat Methodeneinträge (), die eine Liste von Einträgen zurückgibt, die in der ZIP-Datei enthalten sind. Diese Information ist in der ZIP-Kopfzeile enthalten und eine Extraktion ist nicht erforderlich.