2017-04-12 4 views
1

次のコードはファイルを表示します。Javaストリームフィルタに出力が表示されない

Files.walk(Paths.get("E:\\pdf")) 
       .map(path -> path.toAbsolutePath().getFileName()) 
         .forEach(System.out::println); 

しかし、これはなぜpdf出力が表示されないのですか?

Files.walk(Paths.get("E:\\pdf")) 
       .map(path -> path.toAbsolutePath().getFileName()) 
        .filter(path -> path.endsWith(".pdf")) 
         .forEach(System.out::println); 

答えて

4

this questionとしてポイントとthis articleはすべてのための完全な一致は、最終的なディレクトリの区切りの後がある場合path.endsWith()にのみtrueを返す、説明しています

あなたがjava.io.file.Pathオブジェクトを比較する必要がある場合は、注意してくださいそのPath.endsWith(String)は、元のパスのPathオブジェクトの別のサブエレメントと一致しますが、パス名の文字列部分は一致しません。文字列名の部分と一致させる場合は、最初にPath.toString()に電話する必要があります。

クイックフィックスはしてフィルタを交換することです:

path.toString().toLowerCase().endsWith(".pdf"); 

もあり、パスを扱うために作られたJava NIOのPathMatcher、。ここでは一例です:

あなたがして使用することができます
final PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*.pdf"); 

.filter(path -> matcher.matches(path)) 

詳細はFinding Filesチュートリアルを参照してください。

関連する問題