2017-04-18 10 views
0

グロブがあります。このグロブは* .txtのように見えますが、その場合は現在のディレクトリにテキストファイルを検索します。または、**/*。txtのように見えるかもしれません。この場合、ファイルツリーを見てファイルを探す必要があります。グロブに基づいてファイルを検索する

DirectoryStreamは* .txtが渡され、Files.walkが**/*。txtのときに動作します。私のglob(または、私のPathMatcher)に基づいて動作するJava 8のアプローチはありますか?

+0

'Files.walk'の何が問題なのですか? http://javapapers.com/java/glob-with-java-nio/ – kichik

+0

私はルートディレクトリとグロブパターンを取ります。 \ *。txtを取得した場合、そのディレクトリを検索するだけです。ユーザはパターンを使ってサブディレクトリが必要かどうかを示します。すなわち、\ * \ */\ *。txt – Steve

+0

私は答えを見つけたと思います。 walk(Path start、int maxDepth、FileVisitOption ... options) if文を必要に応じて0に設定できると思います。 – Steve

答えて

0

はここ

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++ 
       } 
(このコードはグルーヴィー使用していますが、純粋なJava 8ソリューションとは非常に異なっていないことに注意してください)パターンに基づいてトラバースディレクトリやないのいずれかにそれを得るために、私が思いついたものです
関連する問題