我想从目录中获取所有* .pdf文件(而不是从其子目录中获取)。我使用FileSystems.getDefault().getPathMatcher( "glob:**.pdf")
,但它以递归方式工作。
修改
我已经尝试了FileSystems.getDefault().getPathMatcher( "glob:*.pdf")
但这没有给我任何文件(但在给定目录中有* .pdf文件)。
答案 0 :(得分:0)
问题在于使用glob patterns
。
使用FileSystems.getDefault().getPathMatcher( "glob:*.pdf")
代替FileSystems.getDefault().getPathMatcher( "glob:**.pdf")
。
以下是Javadoc的摘录:
以下规则用于解释glob模式:
- *字符匹配名称组件的零个或多个字符,而不跨越目录边界。
- **字符匹配零个或多个字符跨越目录边界。
答案 1 :(得分:0)
来自文档:
*.java
匹配表示以.java结尾的文件名的路径
因此,glob:*.java
的路径匹配器仅对实际文件名(例如x.pdf
)返回true,例如由Path.getFileName()返回。
在没有子目录的情况下迭代PDF文件的问题的可能解决方案可能限制文件树遍历的深度,而不是改变匹配器的行为。
Path start = Paths.get("C:/Users/maxim/Desktop/test/");
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:**.pdf");
Files.walk(start, 1)
.filter(matcher::matches)
.forEach(System.out::println);