Java:如何使用java.nio.file.FileSystem在zip中创建目录

3
我按照这个页面的说明操作,但无法使其工作。我想要在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库FileSystem有关,而不是一般的文件系统。 - Farmer Joe
2个回答

7

由于Files.createDirectory()javadoc中有说明:

如果dir存在但不是目录(可选的特定异常),则会抛出FileAlreadyExistsException

因此,您需要检查文件夹是否已经存在:

try (FileSystem fs = FileSystems.newFileSystem(uri, env)) {
    Path nf = fs.getPath("new");
    if (Files.notExists(nf)) {
        Files.createDirectory(nf);
    }
}

-3
你尝试过使用 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无法实现这一点。 - FOD
1
好的,有一个名为zipfilesystem的工具可以与FileSystem一起使用,但它是在Java7中引入的。 - Bishaka Samuel
问题不是关于如何一般性地完成它,而是具体使用新的nio API。 - Patrick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接