regex 无法使用PathMatcher和正则表达式获取文件列表

pgvzfuti  于 2022-12-14  发布在  其他
关注(0)|答案(1)|浏览(217)

我正在使用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有什么缺陷。

lqfhib0f

lqfhib0f1#

看起来模式不对。它只匹配名为“前缀”的文件。尝试在String pattern = "Prefix.*";中更改它。
否则,您可以扫描名称以字符串“前缀”开头的文件。

String name = file.getFileName().toString();
if (name.startsWith(pattern)) {
    matchesList.add(name);
}

相关问题