0
我有一個glob,它可能看起來像* .txt,在這種情況下,我想搜索當前目錄中的文本文件。或者它可能看起來像**/*。txt,在這種情況下,我想要遍歷文件樹來查找文件。查找基於全局的文件
DirectoryStream在* .txt傳入時做我想要的,而當我有**/*。txt時,Files.walk會工作。 java 8中有一種方法可以基於我的glob(或者我的PathMatcher)工作嗎?
我有一個glob,它可能看起來像* .txt,在這種情況下,我想搜索當前目錄中的文本文件。或者它可能看起來像**/*。txt,在這種情況下,我想要遍歷文件樹來查找文件。查找基於全局的文件
DirectoryStream在* .txt傳入時做我想要的,而當我有**/*。txt時,Files.walk會工作。 java 8中有一種方法可以基於我的glob(或者我的PathMatcher)工作嗎?
這就是我想出了,得到它要麼遍歷目錄或不基於模式(注意,此代碼使用常規,而不是從一個純Java 8的解決方案非常不同)
Path src = filesystem.getPath(job.srcDir)
int numSubDirs = job.pattern.contains("**") ? Integer.MAX_VALUE : 1
Files.walk(src, numSubDirs)
.filter{Path path -> filesystem.getPathMatcher("glob:${job.pattern}").matches(path.getFileName())}
.filter{Path path -> job.days ? (new Date()) - new Date(path.toFile().lastModified()) <= job.days : true}
.each{ Path path ->
actions[job.action](job, path)
fileCount++
}
'Files.walk'有什麼問題? http://javapapers.com/java/glob-with-java-nio/ – kichik
所以我在一個根目錄和一個glob模式。如果我得到\ *。txt,它應該只搜索該目錄。用戶通過模式表明他們是否需要子目錄,即\ * \ */\ *。txt – Steve
我想我找到了答案。 步行(路徑開始,int maxDepth,FileVisitOption ...選項) 我想我可以只是有一個if語句,並將maxDepth設置爲0,如果有必要 – Steve