为了账号安全,请及时绑定邮箱和手机立即绑定

Java 1.6 - 确定符号链接

Java 1.6 - 确定符号链接

函数式编程 2019-08-02 16:29:31
Java 1.6 - 确定符号链接在DirectoryWalker类中,我想知道File实例是否实际上是指向目录的符号链接(假设,walker在UNIX系统上行走)。鉴于,我已经知道实例是一个目录,以下是确定符号链接的可靠条件吗?File file;// ...      if (file.getAbsolutePath().equals(file.getCanonicalPath())) {    // real directory ---> do normal stuff      }else {    // possible symbolic link ---> do link stuff}
查看完整描述

3 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

Apache Commons中使用的技术使用父目录的规范路径,而不是文件本身。我不认为您可以保证不匹配是由于符号链接,但它是一个很好的迹象表明该文件需要特殊处理。

这是Apache代码(受其许可),为了紧凑而进行了修改。

public static boolean isSymlink(File file) throws IOException {
  if (file == null)
    throw new NullPointerException("File must not be null");
  File canon;
  if (file.getParent() == null) {
    canon = file;
  } else {
    File canonDir = file.getParentFile().getCanonicalFile();
    canon = new File(canonDir, file.getName());
  }
  return !canon.getCanonicalFile().equals(canon.getAbsoluteFile());}


查看完整回答
反对 回复 2019-08-02
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

Java 1.6不提供对文件系统的低级访问。看起来应该包含在Java 1.7中的NIO 2将支持符号链接。可以使用新API的草稿这里提到了符号链接,可以创建跟踪它们。我不确定应该使用哪种方法来确定文件是否是符号链接。有一个用于讨论NIO 2 的邮件列表 - 也许他们会知道。


查看完整回答
反对 回复 2019-08-02
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

另外,请注意file.isFile()file.isDirectory()根据已解析的文件返回结果,因此两者都返回falsefile指的是目标不存在的符号链接。

(我知道这本身并不是一个有用的答案,但它让我绊倒了几次,所以我认为我应该分享)


查看完整回答
反对 回复 2019-08-02
  • 3 回答
  • 0 关注
  • 531 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信