我正在使用PathMatcher和SimpleFileVisitor遍历目录,找到所有以某个前缀开头的文件。但是,尽管有一些文件符合我的偏好,但我无法获得任何文件。
所需文件示例:
Prefix_some_text.csv
下面是调用SimpleFileVisitor类调用的Main代码,它使用带前缀的regex模式,并假设查找以特定模式开头的所有文件:
String directoryAsString = "C:/Users";
String pattern = "Prefix";
SearchFileByWildcard sfbw = new SearchFileByWildcard();
try {
List<String> actual = sfbw.searchWithWc(Paths.get(directoryAsString),pattern);
} catch (IOException e) {
e.printStackTrace();
}
使用SimpleFileVisitor的SearchFileByWildcard类的实现:
static class SearchFileByWildcard {
List<String> matchesList = new ArrayList<String>();
List<String> searchWithWc(Path rootDir, String pattern) throws IOException {
matchesList.clear();
FileVisitor<Path> matcherVisitor = new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attribs) throws IOException {
FileSystem fs = FileSystems.getDefault();
PathMatcher matcher = fs.getPathMatcher("regex:" + pattern);
Path name = file.getFileName(); //takes the filename from the full path
if (matcher.matches(name)) {
matchesList.add(name.toString());
}
return FileVisitResult.CONTINUE;
}
};
Files.walkFileTree(rootDir, matcherVisitor);
return matchesList;
}
}
我在争论是否使用glob而不是regex?或者我的regex有什么缺陷。
1条答案
按热度按时间lqfhib0f1#
看起来模式不对。它只匹配名为“前缀”的文件。尝试在
String pattern = "Prefix.*";
中更改它。否则,您可以扫描名称以字符串“前缀”开头的文件。