如何通过Java读取文件夹中的所有文件?
public void listFilesForFolder(final File folder) {
for (final File fileEntry : folder.listFiles()) {
if (fileEntry.isDirectory()) {
listFilesForFolder(fileEntry);
} else {
System.out.println(fileEntry.getName());
}
}
}
final File folder = new File("/home/you/Desktop");
listFilesForFolder(folder);
可从Java 8获得Files.walk API。
try (Stream<Path> paths = Files.walk(Paths.get("/home/you/Desktop"))) {
paths
.filter(Files::isRegularFile)
.forEach(System.out::println);
}
该示例使用API指南中推荐的try-with-resources模式。它确保在任何情况下都将关闭流。
getName()
只会在其目录中提供文件名,该目录可能是原始文件的子目录。如果计划使用此信息来查找文件,则可能会发现给定的路径getPath()
会更有用。我可以使用这种方法在整个系统中查找所有特定类型的文件,例如pdf或html吗?我关心的是效率,它是否足够快以用于具有数千个文件的系统,还是有更好的选择?
@codeln从Java 8开始,性能是可以接受的,您不会注意到它的任何迟缓之处。它的速度,效率和可读性足以完成您的工作。
在Java 8中,您也可以使用该
filter
方法。然后,不再需要forEach。看到这里-> stackoverflow.com/a/26215931/1029251仅表示它仅初始化一次。