我们在这里讨论的是Java 1.6。由于符号链接尚未得到支持,如何检查它们的存在。
1:告诉是否存在链接文件本身(即使链接已断开也返回true)
2:跟随链接并告知基础文件是否存在。
除了JNI真的没有其他实现方法吗?
java.nio.file.Files.isSymbolicLink(Path path)
。 - konsolebox虽然较慢,但你可以比较File类的getAbsolutePath()和getCanonicalPath()方法。因此,请仅在非关键性代码路径外使用。
以下内容应该可以帮助你入门:
if (file.exists() && !file.isDirectory() && !file.isFile()) {
// it is a symbolic link (or a named pipe/socket, or maybe some other things)
}
if (file.exists()) {
try {
file.getCanonicalFile();
} catch (FileNotFoundException ex) {
// it is a broken symbolic link
}
}
编辑:上述代码无法达到预期效果,因为file.isDirectory()和file.isFile()会解析符号链接。(我们学习进步!)File.isFile
等即可,这将遍历链接。难点在于#1。java.nio.file
并希望避免JNI等,则我发现唯一有效的方法是:static boolean exists(File link) {
File[] kids = link.getParentFile().listFiles();
return kids != null && Arrays.asList(kids).contains(link);
}
嗯...目前还不支持...看到这个问题,我想到的问题是它是否会被支持...符号链接是平台特定的,而Java应该是平台无关的。我怀疑在Java中是否可能实现这样的功能...你可能需要使用本地代码来完成这部分工作,并使用JNI将其与Java程序的其他部分连接起来。