Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
你有一个表示文件或目录的 Path 实例,但该文件是否存在于文件系统中?它可读吗?可写吗?可执行文件?
Path 类中的方法是 syntactic (语法的),这意味着它们在 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)) {
// Logic when the paths locate the same file
}