用Java解析目录符号链接

时间:2015-02-06 18:04:33

标签: java symlink

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

我尝试了File.getCannonicalFile()Files.isSymbolicLink(Path)和许多其他方法,但似乎都没有。有趣的是Files.isDirectory(Path)返回false,而Files.exists(Path)为真。 java是否将符号链接视为文件而不是目录?

1 个答案:

答案 0 :(得分:11)

如果您想完全解析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()之间的区别。