使用 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
. 它将 a 的文件名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 查找文件教程