Folder17
Folder18
Folder19 -> /myfolder/17
Folder20 -> /myfolder/17
我创建了从 Folder19
到 Folder17
和 Folder 20
到 Folder17
的符号链接(symbolic link)
我可以使用Files.isSymbolicLink(path)
来查找文件是否是符号链接(symbolic link)的。但还有其他办法吗?我想知道与我链接的所有文件夹。就像在这种情况下,我想知道 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();
}
}
最佳答案
好问题。您可能会明白为什么它对于某些文件A
来说是多余的。跟踪符号链接(symbolic link)到 A
的每个文件,因为这可能会占用大量空间。因此,浏览目录、检查文件 A
的符号链接(symbolic link)会很简单。 。您可以使用类似于以下内容的内容:
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
的符号链接(symbolic link).
注意:您可以使用 Files#walkFileTree
如果需要,可以递归搜索这些目录。
关于java - 用于获取文件夹的所有符号链接(symbolic link)的文件 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50401697/