使用Java重新创建Zip文件中的文件夹结构 - 空文件夹

时间:2013-09-24 14:32:33

标签: java zip nio

我尝试了几种用Java压缩zip文件中的目录结构的方法。如果我使用ZipOutputStream或Java NIO zip FileSystem并不重要,我就无法在zip文件中添加空文件夹。

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

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

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


编辑:根据答案和评论this is pretty much the solution I got

谢谢!

1 个答案:

答案 0 :(得分: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 Files api创建和复制文件。

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