文档

Java™教程
隐藏目录
检查文件或目录
教程:基本的Java类
课程:基本I/O
章节:文件I/O(使用NIO.2)

检查文件或目录

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

验证文件或目录的存在

Path 类中的方法是语法的,意味着它们对 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)) {
    // 当路径定位到同一文件时的逻辑
}

上一页: 文件操作
下一页: 删除文件或目录