2013-09-24 1 views
5

Ich habe mehrere Möglichkeiten versucht, um eine Verzeichnisstruktur in einer Zip-Datei mit Java zu komprimieren. Egal ob ich ZipOutputStream oder die Java NIO zip FileSystem benutze, ich kann einfach keine leeren Ordner zur Zip-Datei hinzufügen.Eine Ordnerstruktur in einer Zip-Datei mit Java neu erstellen - Leere Ordner

Ich versuchte mit Unix-Zip, und es funktioniert wie erwartet, so dass ich ein möglicherweise Zip-Format-Problem verworfen.

Ich könnte auch eine kleine Problemumgehung, eine leere Datei in den Ordnern hinzufügen, aber ich möchte das nicht wirklich tun.

Gibt es eine Möglichkeit, leere Ordner in ZIP-Dateien mit Java-APIs hinzuzufügen?


EDIT: Basierend auf Antworten und Kommentare, this is pretty much the solution I got.

Danke!

Antwort

4

Java NIO macht dies so einfach wie das Arbeiten mit einem normalen Dateisystem.

public static void main(String[] args) throws Exception { 
    Path zipfile = Paths.get("C:\\Users\\me.user\\Downloads\\myfile.zip"); 

    try (FileSystem zipfs = FileSystems.newFileSystem(zipfile, null);) { 
     Path extFile = Paths.get("C:\\Users\\me.user\\Downloads\\countries.csv"); // from normal file system 
     Path directory = zipfs.getPath("/some/directory"); // from zip file system 
     Files.createDirectories(directory); 
     Files.copy(extFile, directory.resolve("zippedFile.csv")); 
    } 
} 

eine myfile.zip Datei im angegebenen Verzeichnis Angesichts der newFileSystem Anruf wird den Dateityp (.zip meist gibt es weg in diesem Fall) erkennen und ein ZipFileSystem zu erstellen. Dann können Sie einfach Pfade (Verzeichnisse oder Dateien) im Zip-Dateisystem erstellen und die Java NIO Files API verwenden, um Dateien zu erstellen und zu kopieren.

Das oben genannte erstellt die Verzeichnisstruktur /some/directory im Stammverzeichnis der Zip-Datei und dieses Verzeichnis enthält die gezippte Datei.

+0

Ja, aber ich möchte nur eine Zip mit leeren Ordnern erstellen ... danke – caarlos0

+1

@ caarlos0 Dann kopieren Sie keine Dateien hinein ... Verwenden Sie einfach 'Files.createDirectories'. –

+0

Nun, es hat funktioniert, danke! – caarlos0

Verwandte Themen