Folder17
Folder18
Folder19 -> /myfolder/17
Folder20 -> /myfolder/17
我有一个从Folder19
到Folder17
和Folder 20
到Folder17
的创建符号链接
我可以使用Files.isSymbolicLink(path)
来查找文件是否符号链接。但还有另一种方法吗?我想知道链接到我的所有文件夹。就像在这种情况下,我想知道Folder17
的所有链接应该给我Folder19
和Folder20
我在下面创建了类似下面的内容 cd / foo
mkdir b
ln -s /foo/b e
ln -s /foo/b f
ln -s /foo/b g
ls -la
b
e -> /foo/b
f -> /foo/b
g -> /foo/b
在我的java类中,我在下面做了。我期望返回尺寸为3的e,f,g。但是大小为0
Path path = Paths.get("/foo/b");
Collection<Path> paths = Files.walk(path)
.filter(Files::isSymbolicLink)
.filter(p -> {
try {
return path.equals(Files.readSymbolicLink(p));
} catch (IOException e) {
System.out.println("log");
throw new RuntimeException("An I/O error has occurred!");
}
})
.collect(Collectors.toList());
System.out.println(paths.size());
}
catch(Exception e)
{
e.printStackTrace();
}
}
答案 0 :(得分:2)
好问题。您可能会发现为什么某些文件A
跟踪与A
符号链接的每个文件会有多余,因为这可能会占用大量空间。因此,在目录中导航,检查文件A
的符号链接会很简单。您可以使用类似于以下内容的内容:
Files.walk(path)
.filter(Files::isSymbolicLink)
.filter(p -> {
try {
return path.equals(Files.readSymbolicLink(p));
} catch (IOException e) {
throw new RuntimeException("An I/O error has occurred!");
}
})
.collect(Collectors.toList());
这会返回一个List<Path>
,其中包含Path
的所有path
个符号链接。
注意:如果需要,您可以使用Files#walkFileTree
递归搜索这些目录。