📅  最后修改于: 2023-12-03 15:10:11.967000             🧑  作者: Mango
在开发和生产环境中,我们经常需要在文件系统中搜索特定的文件。Java提供了多种方式来搜索文件。
Java 8 引入了 Stream API,可以方便地对集合进行筛选和操作,也可以用来搜索文件。以下代码演示了如何使用Stream API搜索特定目录下的所有 .txt 文件。
Path directory = Paths.get("path/to/directory");
try (Stream<Path> stream = Files.walk(directory)) {
List<String> txtFiles = stream
.map(String::valueOf)
.filter(path -> path.endsWith(".txt"))
.collect(Collectors.toList());
txtFiles.forEach(System.out::println);
}
在上述代码中,我们使用 Files.walk(directory)
遍历目录下的所有文件和子目录。接着我们调用 filter()
方法将结果中的所有非 .txt 文件筛除。最后,我们将结果保存到 List<String>
中,使用 forEach()
打印结果。
Apache Commons IO 提供了丰富的文件操作工具方法。以下是如何使用 FileUtils.listFiles()
方法来搜索特定目录下的所有 .txt 文件的代码。
String directory = "path/to/directory";
Collection<File> txtFiles = FileUtils.listFiles(new File(directory), new String[]{"txt"}, true);
for (File file : txtFiles) {
System.out.println(file.getAbsolutePath());
}
在上述代码中,我们使用 FileUtils.listFiles()
方法,传递目录路径,要搜索的扩展名数组和子目录搜索标志。返回的结果是 Collection<File>
,遍历需要一个 for
循环。
Java 自带的 File
和 DirectoryStream
类也提供了很多搜索功能。以下是如何使用 Files.newDirectoryStream()
方法搜索特定目录下的所有文件的代码。
Path directory = Paths.get("path/to/directory");
try (DirectoryStream<Path> stream = Files.newDirectoryStream(directory)) {
for (Path path : stream) {
System.out.println(path.getFileName());
}
}
在上述代码中,我们使用 Files.newDirectoryStream()
遍历目录下的所有文件和子目录。我们可以用 getFileName()
方法获取主干路径。
无论你选择哪种搜索文件的方式,都应该注意权限和安全。务必检查你的代码,确保只从受信任的目录中搜索文件,避免遍历并搜索整个文件系统。