Software_programming_java_core_Files_Paths

19:00:08

1 递归删除 FilsWalkTree , FileVisitorResult

walkFileTree 方法需要 FileVisitor 接口的实例, file visitor 会得到通知的时机

1. 目录处理之前

FileVisitorResult  preVisitDirectory  (T dir, IOException ex)

2. 当遇到一个文件或目录时

FileVisitorResult  visitFile ( T path, BasicFileAttributes attrs )

3. 当 visitFile 方法发生异常时

FileVisitResult  visitFileFailed ( T path, IOException ex )

4. 目录被处理之后

FileVisitResult  postVisitDirectory (T dir, IOException ex)

 

在每个时机, 通知方法返回下列方法之一:

1. FileVisitResult.CONTINUE 继续访问下一个文件

2. FileVisitResult.SKIP_SUBTREE 继续轮询,但不会访问该目录的子项

3. FileVisitResult.SKIP_SUBLINGS 继续轮询,但不要访问该目录的同级项

4. FileVisitResult.TERMINATE 终止轮询

如果任何方法抛出异常,轮询也会终止,并且该异常从 walkFileTree方法抛出。

SimpleFileVisitor 类实现了这个接口,会在每个点持续迭代以及转抛任何异常。

 

删除一个目录树的示例:

Files.walkFileTree( path, new SimpleFileVisitor<Path>() {

     public FileVisitResult  visitFile( Path file,  BasicFileAttributes attrs ) throw IOException {

          Files.delete(file);

          return  FileVisitResult.CONTINUE;

     }

 

    public FileVisitResult  postVisitDirectory (Path dir, IOException ex)  throws  IOException {

        if ( ex != null ) throw  ex;

        Files.delete ( dir );

        return  FileVisitResult.CONITUE;

     }

});

 

Files.list 返回一个读取目录项的 Stream(Path)  对象, 目录读取时延迟的,目的时尽可能高效地

处理含有大量目录项的目录

try(Stream<Path> entries = Files.list(pathToDirectory)) {

}

读取目录会占用需要关闭的系统资源,需要使用 try

list 不会进入子目录,要出一个目录的所有子目录, Files.walk

try(Stream<Path> entries = Files.walk(pathToRoot)) {

    // 包含所有的子目录和文件, 按深度优先次序访问

}

 

对walk返回的目录进行过滤,且过滤标准涉及文件属性,如 大小,创建时间 类型

要使用 find 方法而不是 walk 方法,使用一个接收路径和 BasicAttributes对象的判定函数来调用find,

唯一好处是效率高,因为目录已经被读取,相关属性可用。

 

============================================================

Path tempFile = Files.createTempFile(dir, prefix, suffx);

Path tempFile = Files.createTempFile(prefix, suffix);

Path tempDir = Files.createTempDirectory(dir, prefix);

Path tempDir = Files.createTempDirectory (prefix);

dir 是路径; prefix / suffix /    Files.createTempFile(null, " .txt") 也可。

 

 

相关文件属性,例如原子性操作, todo:

 

posted @ 2019-09-08 19:24  君子之行  阅读(1)  评论(0编辑  收藏  举报