在 Java 中解析目录符号链接

2022-09-04 07:59:04

给定一个 或 目录对象,如何检查它是否是符号链接,以及如何将其解析为实际目录?FilePath

我尝试过 ,以及许多其他方法,但似乎都不起作用。一个有趣的事情是返回 false,而 true 是真的。Java是否将符号链接视为文件而不是目录?File.getCannonicalFile()Files.isSymbolicLink(Path)Files.isDirectory(Path)Files.exists(Path)


答案 1

如果要完全解析指向实际内容的 to,请使用:Path.toRealPath()

final Path realPath = path.toRealPath();

这将解决所有符号链接等。

但是,由于这可能会失败(例如,符号链接无法解析),因此您必须在此处处理。IOException

因此,如果要测试符号链接是否指向现有目录,则必须执行以下操作:

Files.isDirectory(path.toRealPath());

请注意一个微妙之处:默认情况下,它遵循符号链接Files.exists()

这意味着,如果您将符号链接作为其目标不存在,则:path

Files.exists(path)

将返回 FALSE;但是这个:

Files.exists(path, LinkOption.NOFOLLOW_LINKS)

将返回 TRUE。

在“Unix 术语”中,这是 和 之间的区别。stat()lstat()


答案 2

推荐