本教程是针对JDK 8编写的。本页面描述的示例和实践不利用后续版本引入的改进,并且可能使用已不再可用的技术。
请参阅Java语言变更以了解Java SE 9及后续版本中的更新语言特性的概要。
请参阅JDK发布说明以获取有关所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息。
您有一个表示文件或目录的 Path 实例,但是该文件在文件系统中存在吗?它可读吗?可写吗?可执行吗?
Path 类中的方法是语法的,意味着它们对 Path 实例进行操作。但最终您必须访问文件系统来验证特定的 Path 是否存在或不存在。您可以使用 exists(Path, LinkOption...) 和 notExists(Path, LinkOption...) 方法来实现。注意,!Files.exists(path) 不等同于 Files.notExists(path)。在测试文件存在性时,有三种可能的结果:
如果 exists 和 notExists 都返回 false,则无法验证文件的存在性。
要验证程序是否能够按需访问文件,可以使用 isReadable(Path)、isWritable(Path) 和 isExecutable(Path) 方法。
下面的代码片段验证了特定文件是否存在,并且程序能够执行该文件。
Path file = ...;
boolean isRegularExecutableFile = Files.isRegularFile(file) &
Files.isReadable(file) & Files.isExecutable(file);
TOCTTOU(发音为 TOCK-too)。
当使用符号链接的文件系统时,可能会有两个不同的路径定位到同一个文件。isSameFile(Path, Path) 方法用于比较两个路径,以确定它们是否在文件系统上定位到同一个文件。例如:
Path p1 = ...;
Path p2 = ...;
if (Files.isSameFile(p1, p2)) {
// 当路径定位到同一文件时的逻辑
}