Java:如何使用 java.nio.file.FileSystem 在 zip 中创建目录
Posted
技术标签:
【中文标题】Java:如何使用 java.nio.file.FileSystem 在 zip 中创建目录【英文标题】:Java: How to create a directory in a zip using java.nio.file.FileSystem 【发布时间】:2015-04-16 12:46:35 【问题描述】:我已按照this page 告诉我的内容进行操作,但我无法让它工作。我想要它,以便在我的 test.zip 中有一个名为“new”的文件夹。每当我运行下面的代码时,它都会给出FileAlreadyExistsException
,并且只会创建一个空的 zip 文件。
Map<String, String> env = new HashMap<>();
env.put("create", "true");
Path path = Paths.get("test.zip");
URI uri = URI.create("jar:" + path.toUri());
try (FileSystem fs = FileSystems.newFileSystem(uri, env))
Path nf = fs.getPath("new/");
Files.createDirectory(path);
catch (IOException e)
e.printStackTrace();
【问题讨论】:
修复了标题拼写,删除了文件系统标签,因为这是 Java 库文件系统而不是通用文件系统 【参考方案1】:因为Files.createDirectory()
声明在javadoc 中
抛出
FileAlreadyExistsException
- 如果 dir 存在但不是 目录(可选的特定例外)
你需要检查文件夹是否已经存在:
try (FileSystem fs = FileSystems.newFileSystem(uri, env))
Path nf = fs.getPath("new");
if (Files.notExists(nf))
Files.createDirectory(nf);
【讨论】:
【参考方案2】:你试过 java.util.zip.ZipEntry 吗?
FileOutputStream f = new FileOutputStream("test.zip");
ZipOutputStream zip = new ZipOutputStream(new BufferedOutputStream(f));
zip.putNextEntry(new ZipEntry("new/"));
【讨论】:
我之所以要使用 FileSystem 是因为你可以使用它追加到 zip 文件中,据我所知,ZipFile 和 ZipEntry 做不到。 好吧,zipfilesystem 可以与 FileSystem 一起使用,但它是在 java7 中引入的 问题不在于一般如何做,而在于新的 nio API 的具体操作以上是关于Java:如何使用 java.nio.file.FileSystem 在 zip 中创建目录的主要内容,如果未能解决你的问题,请参考以下文章