6

我尝试了几种方法来使用 Java 将目录结构压缩到 zip 文件中。不管我是使用ZipOutputStreamJava NIO zip 还是 Java NIO zip FileSystem,我都无法将空文件夹添加到 zip 文件中。

我尝试使用 unix zip,它按预期工作,所以我放弃了一个可能的 zip 格式问题。

我也可以做一些解决方法,在文件夹中添加一个空文件,但我真的不想这样做。

有没有办法使用 java API 在 zip 文件中添加空文件夹?


编辑:根据答案和评论,这几乎是我得到的解决方案

谢谢!

4

1 回答 1

5

Java NIO 使这与使用普通文件系统一样容易。

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

myfile.zip定给定目录中的文件,newFileSystem调用将检测文件类型(在这种情况下,.zip 主要将其泄露)并创建一个ZipFileSystem. 然后您可以在 zip 文件系统中创建路径(目录或文件)并使用 Java NIO Filesapi 创建和复制文件。

/some/directory以上将在 zip 文件的根目录创建目录结构,该目录将包含压缩文件。

于 2013-09-24T14:49:28.420 回答