2013-09-24 20 views
5

Java ile bir zip dosyasında bir dizin yapısını sıkıştırmak için birkaç yolu denedim. ZipOutputStream veya Java NIO zip FileSystem kullanmam sorun değil, zip dosyasına boş klasörler ekleyemiyorum.Java ile bir Zip dosyası içinde bir klasör yapısını yeniden oluşturma - Boş klasörleri

Unix zip ile denedim ve beklendiği gibi çalışıyor, bu yüzden olası bir zip biçimli sorununu attım.

Ayrıca, klasörlerin içine boş bir dosya ekleyerek biraz geçici bir çözüm de yapabilirim, ancak bunu gerçekten yapmak istemiyorum.

Java klasörlerini kullanarak zip dosyalarına boş klasörler eklemenin bir yolu var mı?


DÜZENLEME: cevaplar ve yorumlar, this is pretty much the solution I got dayanarak.

Teşekkürler!

cevap

4

Java NIO bunu normal bir dosya sistemi ile çalışmak kadar kolaylaştırır.

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

verilen dizinde bir myfile.zip dosyayı önüne alındığında, (çoğunlukla uzak bu durumda verir .zip) dosya türünü tespit etmek ve bir ZipFileSystem yaratacak newFileSystem çağrı. Ardından, zip dosya sisteminde yalnızca yollar (dizinler veya dosyalar) oluşturabilir ve dosyaları oluşturmak ve kopyalamak için Java NIO Files api'yi kullanabilirsiniz.

Yukarıdaki, zip dosyasının kök dizininde /some/directory dizin yapısını oluşturacak ve bu dizin sıkıştırılmış dosyayı içerecektir.

+0

Evet, ancak yalnızca boş klasörlerle bir zip oluşturmak istiyorum ... teşekkürler – caarlos0

+1

@ caarlos0 O zaman, herhangi bir dosyayı kopyalamayın ... Sadece 'Files.createDirectories' kullanın. –

+0

Eh, işe yaradı, teşekkürler! – caarlos0

İlgili konular