以下代码显示文件。
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);
答案 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教程。