模块  java.base
软件包  java.nio.file

Interface FileVisitor<T>

  • 所有已知实现类:
    SimpleFileVisitor

    public interface FileVisitor<T>
    文件的访问者。 该接口的实现被提供给Files.walkFileTree方法以访问文件树中的每个文件。

    用法示例:假设我们要删除文件树。 在这种情况下,删除目录中的条目后,应删除每个目录。

      Path start = ...     Files.walkFileTree(start, new SimpleFileVisitor<Path>() {         @Override         public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)             throws IOException         {             Files.delete(file);             return FileVisitResult.CONTINUE;         }         @Override         public FileVisitResult postVisitDirectory(Path dir, IOException e)             throws IOException         {             if (e == null) {                 Files.delete(dir);                 return FileVisitResult.CONTINUE;             } else {                 // directory iteration failed                 throw e;             }         }     }); 

    此外,假设我们要将文件树复制到目标位置。 在这种情况下,应遵循符号链接,并且应在复制目录中的条目之前创建目标目录。

      final Path source = ...     final Path target = ...     Files.walkFileTree(source, EnumSet.of(FileVisitOption.FOLLOW_LINKS), Integer.MAX_VALUE,         new SimpleFileVisitor<Path>() {             @Override             public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)                 throws IOException             {                 Path targetdir = target.resolve(source.relativize(dir));                 try {                     Files.copy(dir, targetdir);                 } catch (FileAlreadyExistsException e) {                      if (!Files.isDirectory(targetdir))                          throw e;                 }                 return CONTINUE;             }             @Override             public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)                 throws IOException             {                 Files.copy(file, target.resolve(source.relativize(file)));                 return CONTINUE;             }         }); 
    从以下版本开始:
    1.7
    • 方法详细信息

      • preVisitDirectory

        FileVisitResult preVisitDirectory​(T dir,                                  BasicFileAttributes attrs)                           throws IOException
        在访问目录中的条目之前为目录调用。

        如果此方法返回CONTINUE ,则访问该目录中的条目。 如果此方法返回SKIP_SUBTREESKIP_SIBLINGS则不会访问目录中的条目(以及任何后代)。

        参数
        dir - 对目录的引用
        attrs - 目录的基本属性
        结果
        访问结果
        异常
        IOException - 如果发生I / O错误
      • visitFileFailed

        FileVisitResult visitFileFailed​(T file,                                IOException exc)                         throws IOException
        为无法访问的文件调用。 如果无法读取文件的属性,文件是无法打开的目录以及其他原因,则调用此方法。
        参数
        file - 对文件的引用
        exc - 阻止访问文件的I / O异常
        结果
        访问结果
        异常
        IOException - 如果发生I / O错误
      • postVisitDirectory

        FileVisitResult postVisitDirectory​(T dir,                                   IOException exc)                            throws IOException
        在目录中的条目及其所有后代访问后,为目录调用。 当目录的迭代过早完成时(通过visitFile方法返回SKIP_SIBLINGS ,或者在迭代目录时发生I / O错误),也会调用此方法。
        参数
        dir - 对目录的引用
        exc - null如果目录的迭代完成且没有错误; 否则导致目录迭代过早完成的I / O异常
        结果
        访问结果
        异常
        IOException - 如果发生I / O错误