当前位置:首页 > 开发 > 编程语言 > Java IO > 正文

[NIO.2] 第三十三篇 遍历目录树

发表于: 2014-04-14   作者:cucaracha   来源:转载   浏览:
摘要: 一旦你创建了遍历机制(实现 FileVisitor 接口或继承 SimpleFileVisitor 类),那么就可以调用 Files.walkFileTree() 方法遍历目录树。首先我们定义遍历机制: class ListTree extends SimpleFileVisitor<Path> { @Override public FileVisit
一旦你创建了遍历机制(实现 FileVisitor 接口或继承 SimpleFileVisitor 类),那么就可以调用 Files.walkFileTree() 方法遍历目录树。首先我们定义遍历机制:

class ListTree extends SimpleFileVisitor<Path> { 
    @Override 
    public FileVisitResult postVisitDirectory(Path dir, IOException exc) { 
        System.out.println("Visited directory: " + dir.toString()); 
        return FileVisitResult.CONTINUE; 
    } 
    @Override 
    public FileVisitResult visitFileFailed(Path file, IOException exc) { 
System.out.println(exc); 
 
        return FileVisitResult.CONTINUE; 
    } 
}


上面这段代码将会打印遍历过的目录名。

最简单的 walkFileTree() 方法接受两个参数,第一个参数表示开始遍历的文件(通常是文件树的根),第二个参数表示遍历机制。下面我们看看如何遍历  C:\rafaelnadal 目录树:

Path listDir = Paths.get("C:/rafaelnadal"); //define the starting file tree 
ListTree walk = new ListTree();             //instantiate the walk 
 
try{ 
   Files.walkFileTree(listDir, walk);       //start the walk 
   } catch(IOException e){ 
     System.err.println(e); 
   }


walkFileTree() 还有一个比较复杂的重载方法,参数为:开始文件、自定义遍历选项、目录访问深度(为了确保遍历所有目录,可以设置 Integer.MAX_VALUE)、遍历机制。自定义选项值中可以使用  FileVisitOption 枚举类型,实际上这个枚举中只有一个常量 ,名为 FOLLOW_LINKS,表示在遍历的时候软链接将会被处理为目标文件(默认情况下,软链接不会被处理)。

调用这个方法的例子如下:

Path listDir = Paths.get("C:/rafaelnadal");              //define the starting file 
ListTree walk = new ListTree();                          //instantiate the walk 
EnumSet opts = EnumSet.of(FileVisitOption.FOLLOW_LINKS); //follow links 
 
try{ 
   Files.walkFileTree(listDir, opts, Integer.MAX_VALUE, walk); //start the walk 
   } catch(IOException e){ 
     System.err.println(e); 
   }


注:调用  walkFileTree(start, visitor) 和调用  walkFileTree(start,
EnumSet.noneOf(FileVisitOption.class), Integer.MAX_VALUE, visitor) 的效果是一样的。

上面代码运行后可能的输出为:

Visited directory: C:\rafaelnadal\equipment 
Visited directory: C:\rafaelnadal\grandslam\AustralianOpen 
Visited directory: C:\rafaelnadal\grandslam\RolandGarros 
Visited directory: C:\rafaelnadal\grandslam\USOpen 
Visited directory: C:\rafaelnadal\grandslam\Wimbledon 
Visited directory: C:\rafaelnadal\grandslam 
… 
Visited directory: C:\rafaelnadal


文章来源: http://www.aptusource.org/2014/04/nio-2-recursive-process/

[NIO.2] 第三十三篇 遍历目录树

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

我来说两句
评论内容:
验  证  码:
 
(网友评论仅供其表达个人看法,并不表明本站同意其观点或证实其描述。)
评论列表
已有 0 条评论(查看更多评论)
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号