如果symlink
是与符号链接对应的File对象,则:
File target = symlink.getCanonicalPath();
...成功返回它指向的目标。 Paths#toRealPath()
也适用于同样的情况。
但是,如果符号链接被破坏(悬空),则上述两个API都无法返回File
(或Path
)表示它(不存在)的事物。指着。
我正在编写一个需要能够读取这些值的工具,即使对于悬空的符号链接也是如此。我使用什么API来获取符号链接指向的文件或目录(无论符号链接是正确还是损坏)?
根据接受的答案,可以使用以下方法获取符号链接的目标(即使是破坏的目标):
Path target = Files.readSymbolicLink(Paths.get("/some/directory/symlink"));
...如果target
是相对的,您可以通过执行以下操作,根据找到符号链接本身的位置取消引用它:
Paths.get("/some/directory/symlink").resolveSibling(".").resolve(target);
答案 0 :(得分:4)
您可以使用java的nio文件系统API:
Path target = Files.readSymbolicLink(Paths.get("/symlink"));
Java documentation规定"链接的目标不需要存在"。