首页 > 解决方案 > 使用 Java FileSystems 删除 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);
        }
    }
}

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

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

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

标签: javafilesystemszipzipfile

解决方案


想通了这个问题。上面的代码没有任何问题,事实证明正在使用的 Zip Reader 服务不会关闭 zip 条目。想知道为什么这不会导致 MAC OS 出现问题。


推荐阅读