java流过滤器不显示输出

时间:2017-04-12 08:18:59

标签: java lambda java-8 java-stream

以下代码显示文件。

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);

1 个答案:

答案 0 :(得分:4)

this question指出并且this article解释时,如果最终目录分隔符之后的所有内容完全匹配,则path.endsWith()仅返回true:

  

如果您需要比较java.io.file.Path对象,请注意Path.endsWith(String) 仅匹配原始路径中的另一个子对象元素,而不是路径名称字符串部分!如果要匹配字符串名称部分,则需要先调用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教程。