Java 获取文件夹的所有符号链接的文件API
我创建了一个从Java 获取文件夹的所有符号链接的文件API,java,file,Java,File,我创建了一个从Folder19到Folder17和folder20到Folder17 我可以使用Files.isSymbolicLink(path)查找文件是否是符号链接的。但是还有别的办法吗?我想知道所有链接到我的文件夹。比如,在这种情况下,我想知道Folder17的所有链接,它们应该给我Folder19和Folder20 我在下面创建了一些类似于下面的东西 cd/foo 在我的java类中,我做了如下操作。我希望返回大小为3的e,f,g。但是大小是0 mkdir b ln -s /foo/b
Folder19
到Folder17
和folder20
到Folder17
我可以使用Files.isSymbolicLink(path)
查找文件是否是符号链接的。但是还有别的办法吗?我想知道所有链接到我的文件夹。比如,在这种情况下,我想知道Folder17
的所有链接,它们应该给我Folder19
和Folder20
我在下面创建了一些类似于下面的东西
cd/foo
在我的java类中,我做了如下操作。我希望返回大小为3的e,f,g。但是大小是0
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
Path Path=Path.get(“/foo/b”);
集合路径=文件.walk(路径)
.filter(文件::isSymbolicLink)
.过滤器(p->{
试一试{
返回path.equals(Files.readsymbolicink(p));
}捕获(IOE异常){
System.out.println(“日志”);
抛出新的运行时异常(“发生I/O错误!”);
}
})
.collect(Collectors.toList());
System.out.println(path.size());
}
捕获(例外e)
{
e、 printStackTrace();
}
}好问题。您可能可以理解为什么某些文件
A
跟踪每个符号链接到A
的文件是多余的,因为这可能会占用大量空间。因此,在目录中导航,检查指向文件A
的符号链接将非常简单。您可以使用类似于以下内容的内容:
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();
}
这将返回一个列表
,其中包含所有路径
,这些路径是指向路径
的符号链接
注意:如果需要,您可以使用
文件#walkFileTree
递归搜索这些目录。您可以使用设计用于lambda表达式的目录。谢谢,但我尝试时得到了不同的行为。@GauravSinha您可以详细说明吗?@GauravSinha您可以将路径设置为“/foo/b”
,但是你不想看看里面的“foo”?
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();
}
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());