使用PathMatcher获取特定扩展名的文件

时间:2018-05-02 20:19:30

标签: java file-extension

我想从目录中获取所有* .pdf文件(而不是从其子目录中获取)。我使用FileSystems.getDefault().getPathMatcher( "glob:**.pdf"),但它以递归方式工作。

修改

我已经尝试了FileSystems.getDefault().getPathMatcher( "glob:*.pdf")但这没有给我任何文件(但在给定目录中有* .pdf文件)。

2 个答案:

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