所以我「聽說」在Java 7中引入的DirectoryStream
比傳統的目錄列表方法更快。但是,我不是這種情況。列出整個目錄可能會更快,但是在過濾文件和只接受文件夾時,需要更多時間。舉例來說,這些是代碼:爲什麼File :: listFiles比DirectoryStream更快 - 只接受目錄
使用File
:
ArrayList<File> tempArray = new ArrayList();
for (File file : someFile.listFiles()){
if(!file.isDirectory())
continue;
tempArray.add(file);
}
DirectoryStream
使用:
DirectoryStream<Path> stream = null;
try {
stream = Files.newDirectoryStream(dir, new DirectoryStream.Filter<Path>() {
public boolean accept(Path file) throws IOException {
return Files.isDirectory(file);
}
});
} catch (IOException ex) {
}
ArrayList<File> files = new ArrayList();
for (Path path : stream)
files.add(path.toFile());
stream.close();
第二種方法(使用DirectoryStream)是更慢。我知道兩種方法檢查每個文件,看看它的目錄。或者是因爲DirectoryStream
已同步(如果錯誤,再次糾正我)?
對不起,實際上這個代碼是從原始代碼中提取的,所以我必須在手動再次寫入時意外添加了兩次檢查;在任何情況下,我都不會檢查''directory()''。對於你的第二點,你在談論「新的DirectoryStream.Filter」嗎? –