我尝试了几种用Java压缩zip文件中的目录结构的方法.无论我使用的ZipOutputStream还是Java NIO zip FileSystem,我都无法将空文件夹添加到zip文件中.
我尝试使用unix zip,它按预期工作,所以我放弃了一个可能的zip格式问题.
我也可以做一些解决方法,在文件夹中添加一个空文件,但我真的不想那样做.
有没有办法使用java API在zip文件中添加空文件夹?
编辑:基于答案和评论,这几乎是我得到的解决方案.
谢谢!
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"));
}
}
Run Code Online (Sandbox Code Playgroud)
给myfile.zip定目录中的文件,newFileSystem调用将检测文件类型(在这种情况下,.zip通常会将其删除)并创建一个ZipFileSystem。然后,您可以在zip文件系统中创建路径(目录或文件),并使用Java NIO Filesapi创建和复制文件。
上面将/some/directory在zip文件的根目录下创建目录结构,该目录将包含压缩文件。