2017-02-15 105 views
3

如果symlink是对应于一个符号链接文件对象,则:如何读取断开的符号链接指向的路径?

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

回答

4

您可以使用Java的NIO文件系统API:

Path target = Files.readSymbolicLink(Paths.get("/symlink")); 

Java documentation规定“链接的目标不需要存在”。