已删除目录的FileAlreadyExistsException

时间:2019-04-29 07:59:16

标签: java-8 java.nio.file

为了进行备份,我将带有测试脚本的目录复制到另一个位置。为此,我正在使用Files.walkFileTree(fromDir,SimpleFileVisitor)。

这可以按预期工作,我可以多次复制它而没有任何问题。

但是,当我通过Windows File Explorer删除目标目录时,尝试进行备份时会在目标目录上收到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 File Explorer删除目标目录不会导致此问题,但是显然可以。

万一有人通过Windows File Explorer删除目录,我是否可以做些复制动作。

0 个答案:

没有答案