使用Java 8 +功能,我们可以用几行代码编写代码:
protected static Collection<Path> find(String fileName, String searchDirectory) throws IOException {
try (Stream<Path> files = Files.walk(Paths.get(searchDirectory))) {
return files
.filter(f -> f.getFileName().toString().equals(fileName))
.collect(Collectors.toList());
}
}
Files.walk
返回一个“遍历根于”给定的文件树。要选择所需的文件,只需在 上应用一个过滤器。它将 的文件名与给定的 进行比较。Stream<Path>
searchDirectory
Stream
files
Path
fileName
请注意,文档要求Files.walk
此方法必须在 try-with-resources 语句或类似的控制结构中使用,以确保在流的操作完成后立即关闭流的打开目录。
我正在使用 try-resource-statement。
对于高级搜索,另一种方法是使用 :PathMatcher
protected static Collection<Path> find(String searchDirectory, PathMatcher matcher) throws IOException {
try (Stream<Path> files = Files.walk(Paths.get(searchDirectory))) {
return files
.filter(matcher::matches)
.collect(Collectors.toList());
}
}
如何使用它来查找某个文件的示例:
public static void main(String[] args) throws IOException {
String searchDirectory = args[0];
String fileName = args[1];
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("regex:.*" + fileName);
Collection<Path> find = find(searchDirectory, matcher);
System.out.println(find);
}
更多关于它:Oracle查找文件教程