需要java中通配符文件过滤器的帮助吗

需要java中通配符文件过滤器的帮助吗,java,Java,我必须将这些文件从与给定模式之一匹配的文件夹中分离出来。我有一个包含这些模式的字符串数组。我将此数组作为参数传递到WildCardFilter,以便我可以分离出与数组中给定模式匹配的文件。我的代码如下 String pat1="DailyExistingBusinessReport_*"; String pat2="*DailyNewExistingBusinessReport_.csv"; String pat3="*_EOD_PNL_Explained.*"; String pat4="AB

我必须将这些文件从与给定模式之一匹配的文件夹中分离出来。我有一个包含这些模式的字符串数组。
我将此数组作为参数传递到WildCardFilter,以便我可以分离出与数组中给定模式匹配的文件。我的代码如下

String pat1="DailyExistingBusinessReport_*";
String pat2="*DailyNewExistingBusinessReport_.csv";
String pat3="*_EOD_PNL_Explained.*";
String pat4="ABC*XYZ.csv";
String str[]=new String[]{pat1,pat2,pat3,pat4};
FileFilter fileFilter = new WildcardFileFilter(str);
File dir = new File("\\C:\\Users\\ABC\\Desktop\\Myfiles");
File[] files = dir.listFiles(fileFilter);

for(File f :files){
    System.out.println(f);
}

这将打印出与数组中给定的模式匹配的文件名。但现在我的要求是,除了每个文件名之外,我还需要该文件匹配的模式的确切名称。你知道我应该进一步添加什么代码来获得模式名和文件名吗。

我已经检查了API,没有找到使用
文件过滤器实现这一点的方法。
我建议创建一个过滤器列表并逐一应用:

List<FileFilter> filters = new ArrayList<FileFilter>();
filters.add(new WildCardFileFilter("DailyExistingBusinessReport_*");
filters.add(new WildCardFileFilter("*DailyNewExistingBusinessReport_.csv");
filters.add(new WildCardFileFilter("*_EOD_PNL_Explained.*");
filters.add(new WildCardFileFilter("ABC*XYZ.csv");

File dir = new File("\\C:\\Users\\ABC\\Desktop\\Myfiles");
Map<FileFilter, List<File>> filemap = new HashMap<FileFilter, List<File>>();

for (File file: dir.listFiles()){
    for(FileFilter filter: filters){
         if(filter.accept(file)){
             if(!filemap.containsKey(filter)){
                 filemap.put(filter, new ArrayList<File>());
             }
             filemap.get(filter).add(file);
         }
    }
}
List filters=new ArrayList();
添加(新的通配符文件过滤器(“DailyExistingBusinessReport_*”);
添加(新的通配符文件过滤器(“*DailyNewExistingBusinessReport.csv”);
添加(新的通配符文件过滤器(“*”EOD_PNL_.*);
添加(新的通配符文件过滤器(“ABC*XYZ.csv”);
File dir=新文件(“\\C:\\Users\\ABC\\Desktop\\Myfiles”);
Map filemap=newhashmap();
对于(文件:dir.listFiles()){
用于(文件过滤器:过滤器){
if(filter.accept(文件)){
如果(!filemap.containsKey(过滤器)){
put(filter,newarraylist());
}
获取(过滤器).add(文件);
}
}
}
之后,您应该有一个映射,其中包含过滤器和应用过滤器的文件列表。
我手边没有IDE,所以可能会有一些小错误。

请格式化您的代码。帮助中心可以告诉您如何格式化。什么是WildcardFileFilter?它不在标准API中。我做了与您编写的完全相同的操作,但它涉及两个for循环,并且文件数量很大。这会使程序效率低下。我认为您找不到比这更有效的方法。您只需对文件进行一次迭代,为了保持一致,您必须检查每个文件的所有筛选器(某些文件可能应用于多个筛选器)。尝试检查
文件的源。listFiles(FileFilter筛选器)
,可能我错了。顺便说一句,感谢Boann的修复:)