FileVisitor 接口提供了递归遍历文件树的支持。这个接口上的方法表示了遍历过程中的关键过程,允许你在文件被访问、目录将被访问、目录已被访问、发生错误等等过程上进行控制;换句话说,这个接口在文件被访问前、访问中和访问后,以及产生错误的时候都有相应的钩子程序进行处理。
调用 FileVisitor 中的方法,会返回访问结果 FileVisitResult 对象值,用于决定当前操作完成后接下来该如何处理。FileVisitResult 的标准返回值存放到 FileVisitResult 枚举类型中:
- FileVisitResult.CONTINUE:这个访问结果表示当前的遍历过程将会继续。
- FileVisitResult.SKIP_SIBLINGS:这个访问结果表示当前的遍历过程将会继续,但是要忽略当前文件/目录的兄弟节点。
- FileVisitResult.SKIP_SUBTREE:这个访问结果表示当前的遍历过程将会继续,但是要忽略当前目录下的所有节点。
- FileVisitResult.TERMINATE:这个访问结果表示当前的遍历过程将会停止。
上面的所有枚举值可以通过下面的代码进行遍历:
for (FileVisitResult constant : FileVisitResult.values())
System.out.println(constant);
接下来介绍 FileVisitor 接口上的方法。
FileVisitor.visitFile() 方法
visitFile() 将会在访问目录中的文件的时候被调用。这个方法通常返回 CONTINUE 和 TERMINATE 结果。例如,当你在搜索某个文件的时候,你需要一直返回 CONTINUE 直到文件被找到或已经搜索完所有的文件,一旦文件被找到,就返回 TERMINATE。
当这个方法被调用的时候,它接受文件引用和文件基本属性两个参数。一旦发生 I/O 错误,将会抛出 IOException 异常。下面是这个方法的签名:
FileVisitResult visitFile(T file, BasicFileAttributes attrs) throws IOException
FileVisitor.preVisitDirectory() 方法
preVisitDirectory() 在访问目录中的节点之前被调用。如果返回 CONTINUE 那么将会继续访问,如果返回 SKIP_SUBTREE(只有在这个方法中返回这个值才有意义),那么将会掉过当前目录继续访问。也可以返回 SKIP_SIBLINGS 跳过访问当前目录的所有兄弟节点。
当这个方法被调用,它将接受目录引用和目录基本属性两个参数。方法签名为:
FileVisitResult preVisitDirectory(T dir, BasicFileAttributes attrs) throws IOException
postVisitDirectory() 方法
postVisitDirectory() 将会在目录中所有节点(包括所有子节点)都被访问或访问过程立即停止(可能是发生 I/O 异常,也可能是在在程序中强制停止)的时候被调用。
当这个方法被调用的时候,它接受文件引用和 IOException 两个参数。如果没有异常产生,那么 IOException 的值将会是 null。这个方法的方法签名是:
FileVisitResult postVisitDirectory(T dir, IOException exc) throws IOException
FileVisitor.visitFileFailed() 方法
visitFileFailed() 方法将会在不能访问文件的时候被调用。不能访问文件的原因可能是没有访问权限或是目录不能打开。这个方法被调用时接受访问文件的引用和访问文件时产生的 IOException 两个参数。这个方法的方法签名如下:
FileVisitResult visitFileFailed(T file, IOException exc) throws IOException
文章来源:
http://www.aptusource.org/2014/04/nio-2-filevisitor-interface/
分享到:
相关推荐
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,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统的I/O模型的新技术。自Java 1.4版本引入NIO后,它为Java开发者提供了更高效的数据传输方式,尤其是在处理大量并发...
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 ...
Java IO、NIO以及NIO.2是Java中用于处理输入/输出操作的三种主要机制。本书《Java IO, NIO and NIO.2》旨在深入浅出地介绍这些机制,同时书中内容均为英文。接下来将详细介绍这些知识点。 **Java IO** Java IO是...
本篇我们将深入探讨NIO.2中的几个关键概念和类,包括`Files`, `Path`, `FileAttributes`, `DirectoryWatcher`以及`FileVisitor`。这些组件极大地增强了Java对操作系统文件系统的访问能力。 首先,`Path`接口是NIO.2...
这本书通过一系列章节详细讲解了如何使用NIO.2中的各种类和接口来执行复杂的文件操作。 ### 1. Path 类简介 本书推荐的起点是`java.nio.file.Path`类,这是一个抽象类,是NIO.2的一个里程碑。任何涉及I/O操作的...
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和NIO.2是Java平台中处理输入输出的三个重要阶段,它们各自有其特点和适用范围。学习和运用这些技术,能够帮助开发者更好地处理数据交互,提高程序的性能和可扩展性。通过阅读《Java I:O, ...
`Pro Java 7 NIO.2`这本书由Anghel Leonard著,深入探讨了Java NIO.2 API,这是Java 7引入的进一步扩展,包括: 1. **文件系统API增强**:新增了AsynchronousFileChannel,支持异步文件操作,可以在后台线程中执行...
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 ...
Java NIO提供了FileLock接口来实现这一功能。你可以通过FileChannel的lock()和tryLock()方法获取文件锁。锁可以是独占的(不允许其他线程或进程同时写入),也可以是非独占的(允许读取,但不允许写入)。文件锁的...
Java NIO.pdf nio教程 Java NIO.pdf nio教程 java nio
NIO(New IO)是Java平台中用于处理输入/输出操作的一种高级API,它在Java 1.4版本中引入,以替代传统的IO流模型。NIO提供了更高效、更灵活的数据传输方式,尤其适用于高并发和大数据量的场景。 在Java的NIO体系中...
【java.nio.file库详解】 Java 早期版本的文件I/O操作功能相对有限,存在几个显著问题:不支持现代文件系统特性、API设计复杂且冗长、处理大文件和并发性能不足。为了解决这些问题,Java引入了`java.nio.file`库,...
蔚来(NIO.US)新车上市,蔚来可期 蔚来(NIO.US)是一家中国的新能源汽车制造商,专注于生产高性能的电动汽车。 公司的目标是成为中国最大的新能源汽车品牌,并且跻身全球汽车行业的前列。 蔚来2025年目标价45.5...
Pro Java 7 NIO.2 – PDF Books