在Java中解析目录符号链接

在Java中解析目录符号链接,java,symlink,Java,Symlink,给定一个文件或路径目录对象,如何检查它是否为符号链接,以及如何将其解析为实际目录 我尝试过File.getCannonicalFile(),Files.isSymbolicLink(Path)和许多其他方法,但它们似乎都不起作用。有趣的是Files.isDirectory(Path)返回false,而Files.exists(Path)返回true。java是否将符号链接视为文件而不是目录?如果要完全解析路径以指向实际内容,请使用.toRealPath(): 这将解决所有符号链接等问题 但是,由

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


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

如果要完全解析路径以指向实际内容,请使用
.toRealPath()

这将解决所有符号链接等问题

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

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

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

这意味着如果有一个符号链接作为目标不存在的
路径
,则:

Files.exists(path)
将返回FALSE;但这是:

Files.exists(path, LinkOption.NOFOLLOW_LINKS)
将返回真值


在“Unix术语”中,这就是
stat()
lstat()

之间的区别,那么为什么
文件不起作用呢?你使用的是什么操作系统?无论如何,在Linux上对我来说很好。“它们似乎都不起作用”
Files.exists(path, LinkOption.NOFOLLOW_LINKS)