我需要过滤掉以“_done”结尾的目录中的文件。
该目录包含三个.txt文件,即 format1.txt , format2.txt 和 format2_done.txt ,需要过滤进行。
以下示例正确列出了所有文件:
System.out.println("all files: ");
String[] files = folder.list();
for (String item : files) {
System.out.println(item);
}
输出:
all files:
format1.txt
format2.txt
format2_done.txt
但以下示例:
System.out.println("filtered: ");
String[] filteredFiles = folder.list((File folder, String name)
-> {return !(name.matches("_done.txt>"));});
for (String item : filteredFiles) {
System.out.println(item);
}
生成相同的输出,不会过滤任何内容:
filtered:
format1.txt
format2.txt
format2_done.txt
我做错了什么?
答案 0 :(得分:0)
尝试使用此正则表达式而不是.*_done\\.txt$
,如下所示:
String[] filteredFiles = folder.list((File folder, String name)
-> !name.matches(".*_done\\.txt$")
);
详细信息:
.*
零个或多个字符_done\\.txt
,请注意您应该使用\\
$
结束锚或者你可以使用String::endsWith:
String[] filteredFiles = folder.list((File folder, String name)
-> !name.endsWith("_done.txt")
);