我一直在使用java.nio.file.Files,偶然发现了一个奇怪的问题。我有一个符号链接(symbolic link),但是Files.isSymbolicLink()Files.readAttributes()的符号链接(symbolic link)属性显示了不同的结果。

这是我创建链接的方法:

D:\DEV\test>mklink /D link1 components
symbolic link created for link1 <<===>> components

相关的Java代码:
Path symLinkDirectory = Paths.get("D:\\DEV\\test\\link1");
DosFileAttributes dosFileAttributes = Files.readAttributes(symLinkDirectory, DosFileAttributes.class);

System.out.println(String.format(
        "Files.isSymbolicLink(): %b, dosFileAttributes.isSymbolicLink(): %b",
        Files.isSymbolicLink(symLinkDirectory), dosFileAttributes.isSymbolicLink()));

给我这样的输出:



谁能告诉我为什么属性报告该文件不是符号链接(symbolic link)?我想念什么吗?这也是在Unix上发生吗?

最佳答案

您需要将LinkOption.NOFOLLOW_LINKS添加到readAttributes的调用中,以获取链接本身而不是链接目标的属性。

DosFileAttributes dosFileAttributes = Files.readAttributes(symLinkDirectory,
                        DosFileAttributes.class, LinkOption.NOFOLLOW_LINKS);

09-05 01:43