慕尼黑8549860
2019-10-28 14:15:59
我有此功能,以遞歸方式打印目錄中所有文件的名稱。問(wèn)題是我的代碼很慢,因?yàn)樗看蔚急仨氃L問(wèn)遠(yuǎn)程網(wǎng)絡(luò)設(shè)備。我的計(jì)劃是先從目錄中遞歸加載所有文件,然后再使用正則表達(dá)式遍歷所有文件,以過(guò)濾掉我不需要的所有文件。有誰(shuí)有更好的建議?public static printFnames(String sDir){ File[] faFiles = new File(sDir).listFiles(); for(File file: faFiles){ if(file.getName().matches("^(.*?)")){ System.out.println(file.getAbsolutePath()); } if(file.isDirectory()){ printFnames(file.getAbsolutePath()); } }}這只是以后的測(cè)試,我將不使用這樣的代碼,而是將與高級(jí)正則表達(dá)式匹配的每個(gè)文件的路徑和修改日期添加到數(shù)組中。
3 回答

嚕嚕噠
TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊
在Java 8,它是通過(guò)1襯墊Files.find()與一個(gè)任意大的深度(例如999)和BasicFileAttributes的isRegularFile()
public static printFnames(String sDir) {
Files.find(Paths.get(sDir), 999, (p, bfa) -> bfa.isRegularFile()).forEach(System.out::println);
}
要添加更多過(guò)濾條件,請(qǐng)?jiān)鰪?qiáng)lambda,例如最近24小時(shí)內(nèi)修改的所有jpg文件:
(p, bfa) -> bfa.isRegularFile()
&& p.getFileName().toString().matches(".*\\.jpg")
&& bfa.lastModifiedTime().toMillis() > System.currentMillis() - 86400000
添加回答
舉報(bào)
0/150
提交
取消