2013-09-24 61 views
5

Tôi đã thử một số cách để nén cấu trúc thư mục trong tệp zip bằng Java. Không quan trọng nếu tôi sử dụng ZipOutputStream hoặc Java NIO zip FileSystem, tôi không thể thêm các thư mục trống vào tệp zip.Tạo lại cấu trúc thư mục bên trong tệp Zip bằng Java - Các thư mục trống

Tôi đã thử với zip unix và nó hoạt động như mong đợi, vì vậy tôi đã loại bỏ sự cố định dạng zip.

Tôi cũng có thể giải quyết một chút, thêm một tệp trống bên trong các thư mục, nhưng tôi không thực sự muốn làm điều đó.

Có cách nào để thêm các thư mục trống trong các tệp zip bằng cách sử dụng java API không?


EDIT: Dựa trên câu trả lời và ý kiến, this is pretty much the solution I got.

Cảm ơn!

Trả lời

4

Java NIO làm việc này dễ dàng như làm việc với hệ thống tệp thông thường.

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

Cho một tập tin myfile.zip trong thư mục nhất định, newFileSystem gọi sẽ phát hiện các loại tập tin (.zip chủ yếu cung cấp cho nó đi trong trường hợp này) và tạo ra một ZipFileSystem. Sau đó, bạn chỉ có thể tạo đường dẫn (thư mục hoặc tệp) trong hệ thống tệp zip và sử dụng Java NIO Files api để tạo và sao chép tệp.

Ở trên sẽ tạo cấu trúc thư mục /some/directory tại thư mục gốc của tệp zip và thư mục đó sẽ chứa tệp nén.

+0

Đúng, nhưng tôi muốn tạo một tệp zip chỉ với các thư mục trống ... cảm ơn – caarlos0

+1

@ caarlos0 Sau đó, đừng sao chép bất kỳ tệp nào vào đó ... Chỉ cần sử dụng 'Files.createDirectories'. –

+0

Vâng, nó hoạt động, cảm ơn! – caarlos0