在DirectoryWalker类中,我想知道File实例是否实际上是指向目录的符号链接(假设,walker在UNIX系统上行走).鉴于,我已经知道实例是一个目录,以下是确定符号链接的可靠条件吗?
File file;
// ...
if (file.getAbsolutePath().equals(file.getCanonicalPath())) {
// real directory ---> do normal stuff
}
else {
// possible symbolic link ---> do link stuff
}
Run Code Online (Sandbox Code Playgroud)
eri*_*son 45
Apache Commons中使用的技术使用父目录的规范路径,而不是文件本身.我不认为您可以保证不匹配是由于符号链接,但它是一个很好的迹象表明该文件需要特殊处理.
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());
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*ing 12
另外,请注意file.isFile()
并file.isDirectory()
根据已解析的文件返回结果,因此两者都返回false
时file
指的是目标不存在的符号链接.
(我知道这本身并不是一个有用的答案,但它让我绊倒了几次,所以我认为我应该分享)
它看起来getCanonicalPath()
可以做其他可能使它与绝对路径不同的事情.
如果需要,此方法首先将此路径名转换为绝对形式,就像调用getAbsolutePath()方法一样,然后以依赖于系统的方式将其映射到其唯一形式.这通常涉及删除冗余名称,例如"." 和路径名中的"..",解析符号链接(在UNIX平台上),并将驱动器号转换为标准情况(在Microsoft Windows平台上).
但它可能适用于绝大多数用例; 你的旅费可能会改变.
归档时间: |
|
查看次数: |
38099 次 |
最近记录: |