文档

Java™ 教程-Java Tutorials 中文版
检查文件或目录
Trail: Essential Classes
Lesson: Basic I/O
Section: File I/O (Featuring NIO.2)

检查文件或目录

你有一个表示文件或目录的 Path 实例,但该文件是否存在于文件系统中?它可读吗?可写吗?可执行文件?

验证文件或目录的存在

Path 类中的方法是 syntactic (语法的),这意味着它们在 Path 实例上运行。但最终你必须访问文件系统以验证特定的 Path 是否存在或不存在。你可以使用 exists(Path, LinkOption...)notExists(Path, LinkOption...) 方法。请注意,!Files.exists(path) 不等同于 Files.notExists(path)。当你测试文件存在时,可能会有三个结果:

如果 existsnotExists 返回 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
}

Previous page: File Operations
Next page: Deleting a File or Directory