如何读取破坏的符号链接指向的路径?

时间:2017-02-15 19:51:20

标签: java

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

1 个答案:

答案 0 :(得分:4)

您可以使用java的nio文件系统API:

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

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