给定File
或Path
目录对象,如何检查它是否为符号链接,如何将其解析为实际目录?
我尝试了File.getCannonicalFile()
,Files.isSymbolicLink(Path)
和许多其他方法,但似乎都没有。有趣的是Files.isDirectory(Path)
返回false,而Files.exists(Path)
为真。 java是否将符号链接视为文件而不是目录?
答案 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()
之间的区别。