在 Java 中解析目录符号链接
给定一个 或 目录对象,如何检查它是否是符号链接,以及如何将其解析为实际目录?File
Path
我尝试过 ,以及许多其他方法,但似乎都不起作用。一个有趣的事情是返回 false,而 true 是真的。Java是否将符号链接视为文件而不是目录?File.getCannonicalFile()
Files.isSymbolicLink(Path)
Files.isDirectory(Path)
Files.exists(Path)
给定一个 或 目录对象,如何检查它是否是符号链接,以及如何将其解析为实际目录?File
Path
我尝试过 ,以及许多其他方法,但似乎都不起作用。一个有趣的事情是返回 false,而 true 是真的。Java是否将符号链接视为文件而不是目录?File.getCannonicalFile()
Files.isSymbolicLink(Path)
Files.isDirectory(Path)
Files.exists(Path)
如果要完全解析指向实际内容的 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()