是否可以使用正则表达式获取与目录中给定模式匹配的文件的文件名,而无需手动遍历所有文件。
答案 0 :(得分:25)
您可以使用File.listFiles(FileFilter)
:
public static File[] listFilesMatching(File root, String regex) {
if(!root.isDirectory()) {
throw new IllegalArgumentException(root+" is no directory.");
}
final Pattern p = Pattern.compile(regex); // careful: could also throw an exception!
return root.listFiles(new FileFilter(){
@Override
public boolean accept(File file) {
return p.matcher(file.getName()).matches();
}
});
}
修改强>
因此,要匹配看起来像TXT-20100505-XXXX.trx
的文件,其中XXXX
可以是任意四个连续数字,请执行以下操作:
listFilesMatching(new File("/some/path"), "XT-20100505-\\d{4}\\.trx")
答案 1 :(得分:1)
实现FileFilter(只需要覆盖方法
public boolean accept(File f)
然后,每次你要请求文件列表时,jvm都会将每个文件与你的方法进行比较。正则表达式不能也不应该被使用,因为java是一种跨平台语言,会对不同的系统产生影响。
答案 2 :(得分:0)
package regularexpression;
import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegularFile {
public static void main(String[] args) {
new RegularFile();
}
public RegularFile() {
String fileName = null;
boolean bName = false;
int iCount = 0;
File dir = new File("C:/regularfolder");
File[] files = dir.listFiles();
System.out.println("List Of Files ::");
for (File f : files) {
fileName = f.getName();
System.out.println(fileName);
Pattern uName = Pattern.compile(".*l.zip.*");
Matcher mUname = uName.matcher(fileName);
bName = mUname.matches();
if (bName) {
iCount++;
}
}
System.out.println("File Count In Folder ::" + iCount);
}
}