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

Java:如何使用Java.nio.file.FileSystem在zip中创建目录,java,nio,zipfile,Java,Nio,Zipfile,我已经照他说的做了,但我无法让它发挥作用。我想要它,以便在我的test.zip中有一个名为“new”的文件夹。每当我运行下面的代码时,它都会给出一个文件ReadyExistsException,并且只创建一个空的zip文件 Map<String, String> env = new HashMap<>(); env.put("create", "true"); Path path = Paths.get("test.zip"); URI u

我已经照他说的做了,但我无法让它发挥作用。我想要它,以便在我的test.zip中有一个名为“new”的文件夹。每当我运行下面的代码时,它都会给出一个
文件ReadyExistsException
,并且只创建一个空的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();
    }
Map env=new HashMap();
环境出售(“创建”、“真实”);
Path=Path.get(“test.zip”);
URI=URI.create(“jar:+path.toUri());
try(FileSystem fs=FileSystems.newFileSystem(uri,env)){
Path nf=fs.getPath(“new/”);
创建目录(路径);
}捕获(IOE异常){
e、 printStackTrace();
}

您尝试过java.util.zip.ZipEntry吗

FileOutputStream f = new FileOutputStream("test.zip");
ZipOutputStream zip = new ZipOutputStream(new BufferedOutputStream(f));
zip.putNextEntry(new ZipEntry("new/"));

因为
Files.createDirectory()

抛出
FileReadyExistsException
-如果目录存在但不是 目录(可选特定异常)

您需要检查文件夹是否已退出:

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

我之所以要使用文件系统,是因为您可以使用它附加到zip文件中,据我所知,ZipFile和ZipEntry无法做到这一点。文件系统也可以这样做,但它是在Java7中引入的。问题不是一般如何做,而是新的nio APIFixed title拼写,删除了文件系统标记,因为这是对java库文件系统而不是一般文件系统的修饰