给定一个 File
或 Path
目录对象,如何检查它是否是符号链接(symbolic link)以及如何将其解析为实际目录?
我尝试了 File.getCannonicalFile()
、Files.isSymbolicLink(Path)
和许多其他方法,但它们似乎都不起作用。一件有趣的事情是 Files.isDirectory(Path)
返回 false,而 Files.exists(Path)
为 true。 java 是否将符号链接(symbolic link)视为文件而不是目录?
最佳答案
如果你想完全解析一个Path
指向实际内容,使用.toRealPath()
:
final Path realPath = path.toRealPath();
这将解析所有符号链接(symbolic link)等。
但是,由于这可能会失败(例如,符号链接(symbolic link)无法解析),因此您必须在此处处理 IOException
。
因此,如果你想测试一个符号链接(symbolic link)是否指向一个现有目录,你必须这样做:
Files.isDirectory(path.toRealPath());
请注意 Files.exists()
的一个微妙之处:默认情况下,它遵循符号链接(symbolic link)。
这意味着如果您有一个符号链接(symbolic link)作为目标不存在的路径
,那么:
Files.exists(path)
将返回 FALSE;但是这个:
Files.exists(path, LinkOption.NOFOLLOW_LINKS)
将返回 TRUE。
在“Unix 说法”中,这是 stat()
和 lstat()
之间的区别。
关于java - 在 Java 中解析目录符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28371993/