`
cucaracha
  • 浏览: 140283 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A8f3fa2f-18ce-3862-897a-5d2209197c90
Java NIO.2
浏览量:87287
7a076ba7-8ec8-3241-aa3c-67bb2f7856a2
Java EE 7 简明教...
浏览量:36321
社区版块
存档分类
最新评论

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

阅读更多
一旦你创建了遍历机制(实现 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/
0
1
分享到:
评论

相关推荐

    Java IO, NIO and NIO.2

    NIO.2还包含了许多其他的API扩展和改进,例如对符号链接的支持、文件属性访问、文件树遍历、WatchService等。 以上介绍了Java中的三种I/O机制。在实际开发中,它们各有适用场景。例如,Java IO适合进行传统的I/O...

    Java IO, NIO and NIO.2(Apress,2015)

    Java I/O, NIO, and NIO.2 is a power-packed book that accelerates your mastery of Java's various I/O APIs. In this book, you'll learn about classic I/O APIs (File, RandomAccessFile, the stream classes ...

    java NIO.zip

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统的I/O模型的新技术。自Java 1.4版本引入NIO后,它为Java开发者提供了更高效的数据传输方式,尤其是在处理大量并发...

    Pro Java 7 NIO.2.pdf

    此外,NIO.2还增强了对符号链接和硬链接的支持,这在第三章中有所讨论。用户可以创建、读取和删除这些链接。 ### 6. 文件和目录操作 第四章则详细介绍了文件和目录的各种操作,包括创建、删除、移动等。 ### 7. ...

    Java IO, NIO and NIO.2 原版pdf by Friesen

    New I/O (NIO), and NIO.2 categories. You learn what each category offers in terms of its capabilities, and you also learn about concepts such as paths and Direct Memory Access. Chapters 2 through 5 ...

    NIO.2 入门,第 2 部分: 文件系统 API

    本篇我们将深入探讨NIO.2中的几个关键概念和类,包括`Files`, `Path`, `FileAttributes`, `DirectoryWatcher`以及`FileVisitor`。这些组件极大地增强了Java对操作系统文件系统的访问能力。 首先,`Path`接口是NIO.2...

    java nio.pdf

    java nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava ...

    Java I/O, NIO and NIO.2

    总的来说,Java I/O、NIO和NIO.2是Java平台中处理输入输出的三个重要阶段,它们各自有其特点和适用范围。学习和运用这些技术,能够帮助开发者更好地处理数据交互,提高程序的性能和可扩展性。通过阅读《Java I:O, ...

    Java NIO 中英文版 + Pro Java 7 NIO.2

    `Pro Java 7 NIO.2`这本书由Anghel Leonard著,深入探讨了Java NIO.2 API,这是Java 7引入的进一步扩展,包括: 1. **文件系统API增强**:新增了AsynchronousFileChannel,支持异步文件操作,可以在后台线程中执行...

    Pro Java 7 NIO.2

    This book covers all the important aspects involved in developing NIO.2-based applications. It provides clear instructions for getting the most out of NIO.2 and offers many exercises and case studies ...

    nio.zip_NIO_NewIO_NIO.c_java NIO chm_java nio

    NIO(New IO)是Java平台中用于处理输入/输出操作的一种高级API,它在Java 1.4版本中引入,以替代传统的IO流模型。NIO提供了更高效、更灵活的数据传输方式,尤其适用于高并发和大数据量的场景。 在Java的NIO体系中...

    nio.rar_FastCopyFile.java_NIO_UseFloatBuffer.java_java nio_文件锁

    Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,与传统的BIO( Blocking I/O)相比,NIO具有更好的性能和更高的灵活性。NIO的核心组件包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。...

    优雅的操作文件:java.nio.file 库介绍.pdf

    【java.nio.file库详解】 Java 早期版本的文件I/O操作功能相对有限,存在几个显著问题:不支持现代文件系统特性、API设计复杂且冗长、处理大文件和并发性能不足。为了解决这些问题,Java引入了`java.nio.file`库,...

    蔚来-NIO.US-新车上市,蔚来可期.pdf

    蔚来(NIO.US)新车上市,蔚来可期 蔚来(NIO.US)是一家中国的新能源汽车制造商,专注于生产高性能的电动汽车。 公司的目标是成为中国最大的新能源汽车品牌,并且跻身全球汽车行业的前列。 蔚来2025年目标价45.5...

    ProJava7NIO.2PDFBooks.pdf 英文原版

    Pro Java 7 NIO.2 – PDF Books

    Pro Java 7 NIO.2 原版pdf by Leonard

    This book covers all the important aspects involved in developing NIO.2-based applications. It provides clear instructions for getting the most out of NIO.2 and offers many exercises and case studies ...

Global site tag (gtag.js) - Google Analytics