如何检测一个Java 'File'对象是否指向一个符号链接?
(如果有帮助/关系的话,我知道该文件是指向一个目录而不是文件)
如何检测一个Java 'File'对象是否指向一个符号链接?
(如果有帮助/关系的话,我知道该文件是指向一个目录而不是文件)
File.getCanonicalPath()
解决符号链接问题。
规范路径名是绝对且唯一的。规范形式的具体定义取决于系统。如果必要,此方法首先将该路径名转换为绝对路径名,就像调用
getAbsolutePath()
方法一样,然后以系统相关方式将其映射到其唯一形式。这通常涉及从路径名中删除冗余名称(如“.”和“..”),解析符号链接(在UNIX平台上),并将驱动器号转换为标准大小写(在Microsoft Windows平台上)。
我认为您可以比较 getCanonicalPath()
和 getAbsolutePath()
的结果。
更新:看起来已经有人问过这个问题,请查看那里的答案。
此外,您可以使用isSymbolicLink(Path path)方法。这将更加可靠。
java.io.File file = ...;
boolean isSymbolicLink = Files.isSymbolicLink(file.toPath());
以下是 Java Doc 中类似的示例 'Detecting a Symbolic Link'。
Files.exists
一样,Files.isSymbolicLink
有时可能会返回错误的负值。 - HakanaiFiles.exists()
,您实际上想要的是!Files.notExists()
。但这也不是100%的情况。这种混乱导致我们禁止在我们的代码库中使用这些方法,将调用重定向到我们自己的版本,以抛出异常。 - Hakanai