2013-09-24 9 views
5

Ho provato diversi modi per comprimere una struttura di directory in un file zip con Java. Non importa se uso ZipOutputStream o il codice Java NIO zip FileSystem, non riesco proprio ad aggiungere cartelle vuote al file zip.Ricreare una struttura di cartelle all'interno di un file zip con Java - Cartelle vuote

Ho provato con unix zip, e funziona come previsto, quindi ho scartato un possibile problema di formato zip.

Potrei anche fare una piccola soluzione, aggiungendo un file vuoto all'interno delle cartelle, ma in realtà non voglio farlo.

C'è un modo per aggiungere cartelle vuote nei file zip usando le API java?


EDIT: Sulla base di risposte e commenti, this is pretty much the solution I got.

Grazie!

risposta

4

Java NIO rende tutto questo semplice come lavorare con un normale file system.

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

Dato un file myfile.zip nella directory data, il newFileSystem chiamata in grado di rilevare il tipo di file (.zip per lo dà via in questo caso) e creare una ZipFileSystem. Quindi puoi semplicemente creare percorsi (directory o file) nel file system zip e utilizzare l'API Java NIO Files per creare e copiare file.

Quanto sopra creerà la struttura di directory /some/directory nella radice del file zip e quella directory conterrà il file zippato.

+0

Sì, ma voglio creare un file zip solo con cartelle vuote ... grazie – caarlos0

+1

@ caarlos0 Quindi non copiare alcun file in esso ... Basta usare 'Files.createDirectories'. –

+0

Bene, ha funzionato, grazie! – caarlos0