[英]Filter files using a wildcard character (java)
使用通配符,我想处理目录中的文件。 如果指定了通配符,我要处理与通配符匹配的那些文件,否则,如果没有指定,我将处理所有文件。 这是我的代码
List<File> fileList;
File folder = new File("Directory");
File[] listOfFiles = folder.listFiles();
if(prop.WILD_CARD!=null) {
Pattern wildCardPattern = Pattern.compile(".*"+prop.WILD_CARD+"(.*)?.csv",Pattern.CASE_INSENSITIVE);
for(File file: listOfFiles) {
Matcher match = wildCardPattern.matcher(file.getName());
while(match.find()){
String fileMatch = match.group();
if(file.getName().equals(fileMatch)) {
fileList.add(file); // doesn't work
}
}
}
}
else
fileList = new LinkedList<File>( Arrays.asList(folder.listFiles()));
我无法将与通配符char匹配的文件放在单独的文件列表中。 请帮助我修改代码,以便将所有与通配符char匹配的文件放在单独的文件列表中。 在这里,我将regex中的prop.WILD_CARD连接起来,它可以是任何字符串,例如,如果通配符为test,则我的模式为。 test(。 )?. csv。 我想存储与此通配符匹配的文件,并将其存储在文件列表中。
我刚刚测试了这段代码,它运行得很好。 您应该在其他地方检查逻辑错误。
public static void main(String[] args) {
String WILD_CARD = "";
List<File> fileList = new LinkedList<File>();
File folder = new File("d:\\");
File[] listOfFiles = folder.listFiles();
if(WILD_CARD!=null) {
Pattern wildCardPattern = Pattern.compile(".*"+WILD_CARD+"(.*)?.mpp",Pattern.CASE_INSENSITIVE);
for(File file: listOfFiles) {
Matcher match = wildCardPattern.matcher(file.getName());
while(match.find()){
String fileMatch = match.group();
if(file.getName().equals(fileMatch)) {
fileList.add(file); // doesn't work
}
}
}
}
else
fileList = new LinkedList<File>( Arrays.asList(folder.listFiles()));
for (File f: fileList) System.out.println(f.getName());
}
这将返回D:
驱动器上所有* .mpp文件的列表。
我也建议使用
for (File file : listOfFiles) {
Matcher match = wildCardPattern.matcher(file.getName());
if (match.matches()) {
fileList.add(file);
}
}
我建议您调查FilenameFilter类,看看它是否有助于简化代码。 至于您的正则表达式,我认为您需要转义“。” 使其工作的性格。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.