2017-04-18 16 views
0

我有一個glob,它可能看起來像* .txt,在這種情況下,我想搜索當前目錄中的文本文件。或者它可能看起來像**/*。txt,在這種情況下,我想要遍歷文件樹來查找文件。查找基於全局的文件

DirectoryStream在* .txt傳入時做我想要的,而當我有**/*。txt時,Files.walk會工作。 java 8中有一種方法可以基於我的glob(或者我的PathMatcher)工作嗎?

+0

'Files.walk'有什麼問題? http://javapapers.com/java/glob-with-java-nio/ – kichik

+0

所以我在一個根目錄和一個glob模式。如果我得到\ *。txt,它應該只搜索該目錄。用戶通過模式表明他們是否需要子目錄,即\ * \ */\ *。txt – Steve

+0

我想我找到了答案。 步行(路徑開始,int maxDepth,FileVisitOption ...選項) 我想我可以只是有一個if語句,並將maxDepth設置爲0,如果有必要 – Steve

回答

0

這就是我想出了,得到它要麼遍歷目錄或不基於模式(注意,此代碼使用常規,而不是從一個純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++ 
       }