我目前正在从事一项分配工作,其中包括使用一种方法创建实用程序类,该方法允许在给定(作为参数)目录中按名称搜索文件/目录。
钻探是我有义务在功能编程/流处理领域中做到这一点。
我尝试使用.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());
}
答案 0 :(得分:1)
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());
}
请注意,提供的名称必须与文件完全相同(包括扩展名),否则函数将找不到它