Java 使用PathMatcher获取特定扩展名的文件
我想从一个目录(而不是它的子目录)获取所有*.pdf文件。我使用Java 使用PathMatcher获取特定扩展名的文件,java,file-extension,Java,File Extension,我想从一个目录(而不是它的子目录)获取所有*.pdf文件。我使用FileSystems.getDefault().getPathMatcher(“glob:*.pdf”),但它是递归工作的 编辑 我已经尝试过FileSystems.getDefault().getPathMatcher(“glob:.pdf”),但这不会给我任何文件(但给定目录中有*.pdf文件)。问题在于使用全局模式 使用FileSystems.getDefault().getPathMatcher(“glob:*.pdf”)
FileSystems.getDefault().getPathMatcher(“glob:*.pdf”)
,但它是递归工作的
编辑
我已经尝试过
FileSystems.getDefault().getPathMatcher(“glob:.pdf”)
,但这不会给我任何文件(但给定目录中有*.pdf文件)。问题在于使用全局模式
使用FileSystems.getDefault().getPathMatcher(“glob:*.pdf”)
而不是FileSystems.getDefault().getPathMatcher(“glob:*.pdf”)
以下摘录自:
以下规则用于解释全局模式:
- *字符匹配名称组件的零个或多个字符,而不跨越目录边界
- **字符与跨越目录边界的零个或多个字符相匹配
从文档中:
*.java
匹配表示以.java结尾的文件名的路径
因此,glob:.java
的路径匹配器只会为实际文件名(例如,x.pdf
)返回true,例如
对于在没有子目录的目录中迭代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);
我已经这样做了。当我的目录中有*.pdf文件时,它不会给我任何文件。非常感谢!就是这样。