【发布时间】:2012-10-05 09:54:12
【问题描述】:
使用通配符我想处理目录中的文件。如果指定了通配符,我想处理与通配符匹配的文件,否则如果未指定,我将处理所有文件。这是我的代码
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()));
我无法将匹配通配符字符的文件放在单独的文件列表中。请帮助我修改我的代码,以便我可以将所有匹配通配符字符的文件放在单独的文件列表中。这里我在我的正则表达式中连接 prop.WILD_CARD,它可以是任何字符串,例如如果通配符是 test,我的模式是 .test(.)?.csv。并且我想存储匹配这个通配符的文件并存储在一个文件列表中。
【问题讨论】:
-
我猜你的模式不正确。您必须显示您希望它匹配的模式和文件名
-
@IngoKegel 不,我的模式是正确的,它有效。 prop.WILD_CARD 可以是任何东西,例如,如果它的测试我的模式是 .*test(.*)?.csv。我想存储匹配此通配符的文件并将其存储在文件列表中
-
首先是你的
fileList没有初始化。第二种是在比较之前将file.getName()和fileMatch打印到控制台。 -
您也不需要
while (match.find())部分。可以换成if (match.matches()) fileList.add(file) -
@svz 我做了比较和名字匹配