【问题标题】:Java : Wild card File search in FolderJava:文件夹中的通配符文件搜索
【发布时间】:2016-07-25 03:00:29
【问题描述】:

我有一个包含文件列表的文件夹。我想搜索文件。

例如。 1. TBC_DICV_11943_IGAXMLService__V1.0

搜索关键字为 TBC*IGAXML*1* , *1.0, IGAXMLService 等

EXEC_DICV_SERVICE_TEST

搜索关键字是DICV,*Test 请问能帮忙搜索一下吗?

【问题讨论】:

  • 很好。你有问题吗?
  • 你为什么不自己尝试一下?
  • 你为什么不能试试String.contains() ??
  • @AjayKulkarni 很高兴在这里见到你 ☺️ 我是否纠正了String.contains() 在这种情况下的帮助??
  • @Sibidharan:这里也一样...希望你做得很好。让我们在FB ping :)

标签: java wildcard


【解决方案1】:

你可以这样试试`

List<String>arrlist=new ArrayList<String>();
   arrlist.add("what ever u wants");// add more
        for(int i=0;i<arrlist.size();i++)
  {
  if(arrlist.get(i).equals(" TBC_DICV_11943_IGAXMLService__V1.0"));
   {
    System.out.println("match found do your stuff here");
    }
   }

【讨论】:

  • 如果您能够使用equals 做到这一点,那么这样做是没有意义的 - 简单地使用ArrayList.contains 会更有效。我认为问题的重点是 OP 想要进行通配符搜索。 (另外,使用迭代器或增强的 for 循环)。
  • 请删除此答案,此答案与我的问题无关。
【解决方案2】:

这是一种使用 Stream 和 Pattern 的方式:

        List<String> list = new ArrayList<>();
        list.add("foo");
        list.add("TBC_DICV_11943_IGAXMLService__V1.0");
        list.add("bar");
        Pattern pattern = Pattern.compile("TBC.*IGAXML.*1.*");
        list.stream().filter(value -> pattern.matcher(value).find()).forEach(System.out::println);

【讨论】:

  • 可能有也可能没有n个*
  • 这种方法足够灵活,可以使用任何你想要的正则表达式,只需修改 Pattern pattern = Pattern.compile();
【解决方案3】:
String serachkeyword;
FileFilter fileFilter = new WildcardFileFilter(serachkeyword);
File[] files = new File(path).listFiles(fileFilter);
List<File> list = new ArrayList<File>(Arrays.asList(files));

serachkeyword 是 TBC*IGAXML*1* , *1.0, IGAXMLService 等

它工作正常。

感谢您回答我的问题。

【讨论】:

    猜你喜欢
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 2013-12-27
    • 2012-10-24
    相关资源
    最近更新 更多