Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取文件夹的所有符号链接的文件API_Java_File - Fatal编程技术网

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());