我一直在玩 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()));
给我这个输出:
Files.isSymbolicLink(): true, dosFileAttributes.isSymbolicLink(): false
谁能告诉我为什么属性报告文件不是符号链接(symbolic link)?我错过了什么吗? Unix 上也会发生这种情况吗?
最佳答案
您需要将 LinkOption.NOFOLLOW_LINKS
添加到 readAttributes 的调用中以获取链接本身的属性,而不是链接目标。
DosFileAttributes dosFileAttributes = Files.readAttributes(symLinkDirectory,
DosFileAttributes.class, LinkOption.NOFOLLOW_LINKS);
关于Windows 中的 Java 和符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20024848/