检查文件或目录

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

验证文件或目录的存在

Path类中的方法是语法上的,这意味着它们在Path实例上运行。但是final您必须访问文件系统以验证特定的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);

Note:

这些方法中的任何一种完成后,都无法保证可以访问该文件。在许多应用程序中,一个常见的安全缺陷是执行检查然后访问文件。有关更多信息,请使用您喜欢的搜索引擎查找TOCTTOU(发音为* TOCK-too *)。

检查两个路径是否位于同一文件中

当您使用符号链接的文件系统时,可能会有两个不同的路径来定位同一文件。 isSameFile(Path, Path)方法比较两个路径以确定它们是否在文件系统上找到相同的文件。例如:

Path p1 = ...;
Path p2 = ...;

if (Files.isSameFile(p1, p2)) {
    // Logic when the paths locate the same file
}