FileAlreadyExistsException для удаленного каталога - PullRequest
0 голосов
/ 29 апреля 2019

В целях создания резервной копии я копирую каталог со сценариями тестирования в другое место. Для этого я использую Files.walkFileTree (отDir, SimpleFileVisitor).

Это работает, как и ожидалось, и я могу скопировать его несколько раз без каких-либо проблем.

Но когда я удаляю целевой каталог через проводник Windows, я получаю исключение java.nio.file.FileAlreadyExistsException для целевого каталога, когда я пытаюсь сделать резервную копию.

Я почти уверен, что целевой директории там нет.

Когда я закрываю программу Java и запускаю ее снова, она снова работает. Это как если бы ручное удаление каталога блокировало «несуществующий» целевой каталог, а Java выдает исключение FileAlreadyExistsException.

Вот соответствующие части SimpleFileVisitor

Я использую эти опции при копировании файлов

StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES, LinkOption.NOFOLLOW_LINKS
  @Override
    public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException
    {
      Path copyDir = toDir.resolve(fromDir.relativize(dir));
      try {
        Files.createDirectories(copyDir);
      }
      catch(IOException ioe) {
        LOG.error("Failed to create directory " + copyDir.toString());
        throw ioe;
      }
      return FileVisitResult.CONTINUE;
    }

    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException
    {
      Path toFile = toDir.resolve(fromDir.relativize(file));
      try {
        Files.copy(file, toFile, opts);
      }
      catch(IOException ioe) {
        LOG.error("Failed to create file " + toFile.toString());
        throw ioe;        
      }
      return FileVisitResult.CONTINUE;
    }

Я ожидал, что удаление целевого каталога через проводник Windows не вызовет этой проблемы, но, очевидно, это так.

Могу ли я что-нибудь сделать, чтобы сделать возможным действие копирования в случае, если кто-то удалит каталог через проводник Windows.

...