为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Java中找到与通配符字符串匹配的文件?

如何在Java中找到与通配符字符串匹配的文件?

忽然笑 2019-07-06 16:07:59
如何在Java中找到与通配符字符串匹配的文件?这应该很简单。如果我有这样的绳子:../Test?/sample*.txt那么,获得与此模式匹配的文件列表的普遍接受的方法是什么?(例如,它应该匹配../Test1/sample22b.txt和../Test4/sample-spiffy.txt但不是../Test3/sample2.blah或../Test44/sample2.txt)我看过org.apache.commons.io.filefilter.WildcardFileFilter它似乎是正确的,但我不知道如何使用它来查找相对目录路径中的文件。我想我可以查找Ant的源代码,因为它使用通配符语法,但是这里肯定遗漏了一些非常明显的东西。(编辑上面的例子只是一个例子。我正在寻找在运行时解析包含通配符的一般路径的方法。我根据Mmyers的建议想出了怎么做,但这有点烦人。更不用说,java JRE似乎自动解析主参数(字符串[]参数)中的简单通配符,以“节省”我的时间和麻烦.我只是很高兴我没有在混合中有非文件的争论。)
查看完整描述

3 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

考虑ApacheAnt中的DirectoryScaner:

DirectoryScanner scanner = new DirectoryScanner();scanner.setIncludes(new String[]{"**/*.java"});
scanner.setBasedir("C:/Temp");scanner.setCaseSensitive(false);scanner.scan();String[] files = scanner.getIncludedFiles();

您需要引用ant.jar(蚂蚁1.7.1的~1.3MB)。


查看完整回答
反对 回复 2019-07-06
?
隔江千里

TA贡献1906条经验 获得超10个赞

试一试FileUtils从…Apache Commons-io (listFilesiterateFiles方法):

File dir = new File(".");FileFilter fileFilter = new WildcardFileFilter("sample*.java");
File[] files = dir.listFiles(fileFilter);for (int i = 0; i < files.length; i++) {
   System.out.println(files[i]);}

来解决您的问题。TestX文件夹,我将首先遍历文件夹列表:

File[] dirs = new File(".").listFiles(new WildcardFileFilter("Test*.java");for (int i=0; i<dirs.length; i++) {
   File dir = dirs[i];
   if (dir.isDirectory()) {
       File[] files = dir.listFiles(new WildcardFileFilter("sample*.java"));
   }}

相当“蛮力”的解决方案,但应该工作得很好。如果这不符合您的需要,则可以始终使用RegexFileFilter.


查看完整回答
反对 回复 2019-07-06
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

下面是按模式列出文件的示例Java 7 Nio 球状和Java 8 Lambdas:

    try (DirectoryStream<Path> dirStream = Files.newDirectoryStream(
            Paths.get(".."), "Test?/sample*.txt")) {
        dirStream.forEach(path -> System.out.println(path));
    }

    PathMatcher pathMatcher = FileSystems.getDefault()
        .getPathMatcher("regex:Test./sample\\w+\\.txt");
    try (DirectoryStream<Path> dirStream = Files.newDirectoryStream(
            new File("..").toPath(), pathMatcher::matches)) {
        dirStream.forEach(path -> System.out.println(path));
    }


查看完整回答
反对 回复 2019-07-06
  • 3 回答
  • 0 关注
  • 2022 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号