流处理-按名称在给定目录中搜​​索文件/目录

时间:2019-01-14 20:30:33

标签: 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(n -> n.getFileName().toString().equals(name))
            .map(n -> n.toFile())
            .collect(Collectors.toList());
}

3 个答案:

答案 0 :(得分:1)

签出this question

File dir= new File("path");
File[] fileList = dir.listFiles(new FilenameFilter() 
{
    public boolean accept(File dir, String foundFileName) 
   {
        return name.equalsIgnoreCase(foundFileName);
   }
});

尽管您似乎只是在搜索一个特定的文件,所以它并不是完成此任务的最佳代码。无论如何,您的文件应位于数组的第一个位置。或制造一些令人讨厌的dir.listFiles()..[0]

答案 1 :(得分:0)

您可以改用Files.list(Path dir)

List<File> listOfFiles = Files.list(Paths.get(path))
                              .filter(e -> e.getFileName().endsWith(name))
                              .map(n -> n.toFile()).collect(Collectors.toList());

注意:

根据您的要求调整过滤条件。我假设name的值类似于.txt,因此listOfFiles将包含所有以.txt结尾的文件

答案 2 :(得分:0)

walk方法将为您服务,但是在开始时转换为文件可以使您使用getName方法,该方法将File名称返回为String < / p>

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

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