Удаление нескольких файлов в zip-файле с использованием Java FileSystems - PullRequest
0 голосов
/ 13 марта 2020
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);
        }
    }
}

Приведенный выше лог c отлично работает в ОС MA C, но выдает следующую ошибку в Windows:

ОШИБКА: java .nio.file.FileSystemException: C: \ Users \ XSXDXX \ Downloads \ Test.zip: процесс не может получить доступ к файлу, поскольку он используется другим процессом.

Каков наилучший способ удаления файлов в Zip, когда я знаю пути файлов, которые мне нужно удалить заранее?

Ответы [ 2 ]

0 голосов
/ 13 марта 2020

Разобрался с проблемой. Ничего плохого в приведенном выше коде, оказывается, используется служба Zip Reader, которая не закрывает Zip Entry. Интересно, почему это не вызвало проблемы в ОС MA C.

0 голосов
/ 13 марта 2020

Следует помнить, что косые черты в windows поменялись местами: c: \ Можете ли вы привести пример своего пути?

...