2013-09-24 8 views
5

Próbowałem na kilka sposobów zip struktury katalogowej w pliku zip z Java. Nie ma znaczenia, czy używam ZipOutputStream lub zip NIO Java FileSystem, po prostu nie mogę dodać pustych folderów do pliku zip.Odtwarzanie struktury folderów wewnątrz pliku ZIP za pomocą Java - Puste foldery

Próbowałem z systemem zip i działało zgodnie z oczekiwaniami, więc odrzuciłem prawdopodobnie problem w formacie zip.

Mogę również zrobić małe obejście, dodając pusty plik wewnątrz folderów, ale tak naprawdę nie chcę tego robić.

Czy istnieje sposób na dodanie pustych folderów w plikach zip przy użyciu interfejsów API Java?


EDIT: Na podstawie odpowiedzi i komentarze, this is pretty much the solution I got.

Dzięki!

Odpowiedz

4

Java NIO czyni to tak prostym, jak praca ze zwykłym systemem plików.

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

Biorąc plik myfile.zip w danym katalogu, wywołanie newFileSystem wykryje typ pliku (.zip przeważnie daje ją w tym przypadku) i stworzyć ZipFileSystem. Następnie możesz po prostu utworzyć ścieżki (katalogi lub pliki) w systemie plików zip i używać apletu Java NIO Files do tworzenia i kopiowania plików.

Powyższe utworzy strukturę katalogów /some/directory w katalogu głównym pliku zip, a katalog będzie zawierał spakowany plik.

+0

Tak, ale chcę utworzyć zip tylko z pustymi folderami ... dzięki – caarlos0

+1

@ caarlos0 Następnie nie kopiuj żadnych plików do niego ... Wystarczy użyć 'Files.createDirectories'. –

+0

Cóż, zadziałało, dzięki! – caarlos0

Powiązane problemy