使用Java文件系统删除zip中的多个文件 publicstaticvoiddeletefilesinzip( 字符串zipStringPath, 列表路径 )抛出IOException { Map env=new HashMap(); 环境put(“创建”、“假”); Path zipPath=Path.get(zipStringPath); URI=URI.create(“jar:+zipPath.toUri()); try(FileSystem fs=FileSystems.newFileSystem(uri,env)) { 用于(字符串路径:路径) { Path filePath=fs.getPath(Path); 文件。删除(文件路径); } } }

使用Java文件系统删除zip中的多个文件 publicstaticvoiddeletefilesinzip( 字符串zipStringPath, 列表路径 )抛出IOException { Map env=new HashMap(); 环境put(“创建”、“假”); Path zipPath=Path.get(zipStringPath); URI=URI.create(“jar:+zipPath.toUri()); try(FileSystem fs=FileSystems.newFileSystem(uri,env)) { 用于(字符串路径:路径) { Path filePath=fs.getPath(Path); 文件。删除(文件路径); } } },java,filesystems,zip,zipfile,Java,Filesystems,Zip,Zipfile,上述逻辑在MAC OS中运行良好,但在Windows中引发以下错误: 错误:java.nio.file.FileSystemException:C:\Users\XSXDXX\Downloads\Test.zip:该进程无法访问该文件,因为另一个进程正在使用该文件 当我事先知道需要删除的文件路径时,删除Zip文件的最佳方法是什么?您应该记住,windows中的路径斜杠是反向的:c:\ 你能举例说明你的道路吗 解决了这个问题。 上面的代码没有问题,事实证明使用了一个Zip阅读器服务,它不会关闭Zi

上述逻辑在MAC OS中运行良好,但在Windows中引发以下错误:

错误:java.nio.file.FileSystemException:C:\Users\XSXDXX\Downloads\Test.zip:该进程无法访问该文件,因为另一个进程正在使用该文件


当我事先知道需要删除的文件路径时,删除Zip文件的最佳方法是什么?

您应该记住,windows中的路径斜杠是反向的:c:\ 你能举例说明你的道路吗

解决了这个问题。
上面的代码没有问题,事实证明使用了一个Zip阅读器服务,它不会关闭Zip条目。想知道为什么这不会在MAC OS中引起问题。

这应该是一个评论,而不是答案。Windows通常接受正斜杠作为文件分隔符,即使不接受,异常似乎与此无关。哪一行导致了异常?是
文件系统.newFileSystem
行吗?你确定.zip文件没有打开吗?写.zip文件的代码是否记得关闭其输出流?
public static void deleteFilesInZip(
    String zipStringPath,
    List<String> paths
) throws IOException
{
    Map<String, String> env = new HashMap<>();
    env.put("create", "false");
    Path zipPath = Paths.get(zipStringPath);
    URI uri = URI.create("jar:" + zipPath.toUri());
    try (FileSystem fs = FileSystems.newFileSystem(uri, env))
    {
        for(String path: paths)
        {
            Path filePath = fs.getPath(path);
            Files.delete(filePath);
        }
    }
}