我是DirectoryStream的新手,现在开始学习它了。我看到了这句话
然而,
7引入了一种更快的替代File#listFiles的方法,称为DirectoryStream。
并决定用简单的代码来测试它。
public class Testing {
static Path dir = Paths.get("C:\\Users\\Dmitry\\Downloads");
// Method using File.listFiles
public static Set<String> listFilesUsingJavaIO(String dir) {
return Stream.of(new File(dir).listFiles())
.filter(file -> !file.isDirectory())
.map(File::getName)
.collect(Collectors.toSet());
}
// Method using DirectoryStream
public static Set<String> listFilesUsingDirectoryStream(String dir) throws IOException {
Set<String> fileList = new HashSet<>();
try (DirectoryStream<Path> stream = Files.newDirectoryStream(Paths.get(dir))) {
for (Path entity : stream) {
if (!Files.isDirectory(entity)) {
fileList.add(entity.getFileName()
.toString());
}
}
}
return fileList;
}
public static void main(String[] args) throws IOException {
LocalDateTime ldt1 = LocalDateTime.now();
Set<String> setik = listFilesUsingDirectoryStream(dir.toString());
System.out.println(setik);
LocalDateTime ldt2 = LocalDateTime.now();
long seconds = ChronoUnit.MILLIS.between(ldt1,ldt2);
System.out.println(seconds); // Difference in time
}
}我有两种方法。一种使用File.listFiles(),另一种使用- DirectoryStream。多次执行它们,并始终得到相同的结果-使用File.listFiles的流更快。我真的很感兴趣,如果使用DirectoryStream ()的StreamwithFile.listFiles()工作得更好,我做错了什么,还有什么是File.listFiles的意义。
我非常感谢你的回答!
发布于 2021-02-10 16:47:04
当您拥有具有数千个文件的目录时,File#listFiles()将花费一段时间,因为它必须枚举所有文件并构造返回的数组。DirectoryStream在读取目录时将开始返回文件。
如果您的应用程序不需要整个文件列表(例如,如果它正在寻找与某些条件匹配的任何文件),那么DirectoryStream可能会大大加快速度。
https://stackoverflow.com/questions/66140472
复制相似问题