Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.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 流处理-按名称搜索给定目录中的文件/dir_Java_File_Java 8_Functional Programming_Java Stream - Fatal编程技术网

Java 流处理-按名称搜索给定目录中的文件/dir

Java 流处理-按名称搜索给定目录中的文件/dir,java,file,java-8,functional-programming,java-stream,Java,File,Java 8,Functional Programming,Java Stream,我目前正在做一项工作,其中包括创建一个实用程序类,该类使用一种方法,允许在给定(作为参数)目录中按名称搜索文件/目录 演练是,我有义务在函数编程/流处理领域内这样做 我曾尝试使用.walk()和.find()来实现这一点,但没有效果 public static List<File> findFile(Path path, String name) throws IOException{ return Files.walk(path) .filter(

我目前正在做一项工作,其中包括创建一个实用程序类,该类使用一种方法,允许在给定(作为参数)目录中按名称搜索文件/目录

演练是,我有义务在函数编程/流处理领域内这样做

我曾尝试使用
.walk()
.find()
来实现这一点,但没有效果

public static List<File> findFile(Path path, String name) throws IOException{

    return Files.walk(path)
            .filter(n -> n.getFileName().toString().equals(name))
            .map(n -> n.toFile())
            .collect(Collectors.toList());
}
publicstaticlist findFile(路径、字符串名)引发IOException{
返回文件.walk(路径)
.filter(n->n.getFileName().toString().equals(name))
.map(n->n.toFile())
.collect(Collectors.toList());
}
退房

虽然看起来您只是在尝试搜索一个特定的文件,但这并不是执行此任务的最佳代码。无论如何,您的文件应该位于数组的第一个位置。或者制作一些讨厌的
dir.listFiles()

List listOfFiles=Files.List(path.get(path))
.filter(e->e.getFileName().endsWith(名称))
.map(n->n.toFile()).collect(collector.toList());
注:


根据您的要求调整过滤条件。我假设
name
有一个类似.txt的值,因此
listOfFiles
将包含以.txt结尾的所有文件
walk
方法将对您有效,但在开始时转换为file允许您使用
getName
方法,该方法将
文件
名称作为
字符串返回

public static List<File> findFile(Path path, String name) throws IOException{
    return Files
        .walk(path)
        .map(Path::toFile)    //.map(p -> p.toFile())
        .filter(File::isFile) //.filter(f -> f.isFile())
        .filter(f -> f.getName().equals(name))
        .collect(Collectors.toList());
}
publicstaticlist findFile(路径、字符串名)引发IOException{
返回文件
.步行(小径)
.map(路径::toFile)/.map(p->p.toFile())
.filter(文件::isFile)/.filter(f->f.isFile())
.filter(f->f.getName().equals(name))
.collect(Collectors.toList());
}

请注意,提供的名称必须与文件(包括其扩展名)完全相同,否则函数将找不到它

如何传递参数值。你们能不能显示路径和文件名的值以更好地帮助我们。你们应该更具体地说明“但它不起作用”。你遇到了什么问题?谢谢@Nicholas!这就是我所了解的更清晰的版本:返回Arrays.stream(path.toFile().listFiles()).filter(n->n.getName().equals(name)).collect(Collectors.toList());我忘了提一下,我想让它递归-你知道我如何实现它吗?递归?你能给我一个你想要达到的目标的例子吗?我的意思是,如果我正确理解FIles.list(),它将不会在文件树中找到具有给定名称且“更深”的文件。我想让它不仅返回path文件夹中的文件名,还返回path/foo/和path/foo/bar等文件名。@NicholasK现在,轮到OP解释他们遇到的实际问题。@hobbledehoy:回答了你的这部分问题。
FilenameFilter
可以用lambda表达式表示。
List<File> listOfFiles = Files.list(Paths.get(path))
                              .filter(e -> e.getFileName().endsWith(name))
                              .map(n -> n.toFile()).collect(Collectors.toList());
public static List<File> findFile(Path path, String name) throws IOException{
    return Files
        .walk(path)
        .map(Path::toFile)    //.map(p -> p.toFile())
        .filter(File::isFile) //.filter(f -> f.isFile())
        .filter(f -> f.getName().equals(name))
        .collect(Collectors.toList());
}