猿问

Java 1.6 - 确定符号链接

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

}


函数式编程
浏览 532回答 3
3回答

慕的地6264312

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());}

繁星淼淼

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

饮歌长啸

另外,请注意file.isFile()并file.isDirectory()根据已解析的文件返回结果,因此两者都返回false时file指的是目标不存在的符号链接。(我知道这本身并不是一个有用的答案,但它让我绊倒了几次,所以我认为我应该分享)
随时随地看视频慕课网APP

相关分类

Java
我要回答