JAVA正则表达式过滤文件的实现方法
JAVA正则表达式过滤文件的实现方法
正则表达式过滤文件列表,听起来简单,如果用java实现,还真需要一番周折,本文简析2种方式
1、适用于路径确定,文件名时正则表达式的情况(jdk6的写法)
StringfilePattern="/data/logs/.+\\.log";
Filef=newFile(filePattern);
FileparentDir=f.getParentFile();
Stringregex=f.getName();
FileSystemFS=FileSystems.getDefault();
finalPathMatchermatcher=FS.getPathMatcher("regex:"+regex);
DirectoryStream.FilterfileFilter=newDirectoryStream.Filter(){
@Override
publicbooleanaccept(Pathentry)throwsIOException{
returnmatcher.matches(entry.getFileName())&&!Files.isDirectory(entry);
}
};
Listresult=Lists.newArrayList();
try(DirectoryStreamstream=Files.newDirectoryStream(parentDir.toPath(),fileFilter)){
for(Pathentry:stream){
result.add(entry.toFile());
}
}catch(IOExceptione){
e.printStackTrace();
}
for(Filefile:result){
System.out.println(file.getParent()+"/"+file.getName());
}
2、适用于路径确定,文件名正则表达式的情况,这种正则表达式是JAVA支持的表达式,而非系统(unix)文件系统表达式(jdk8写法)
Pathpath=Paths.get("/data/logs");
Patternpattern=Pattern.compile("^.+\\.log");
Listpaths=Files.walk(path).filter(p->{
//如果不是普通的文件,则过滤掉
if(!Files.isRegularFile(p)){
returnfalse;
}
Filefile=p.toFile();
Matchermatcher=pattern.matcher(file.getName());
returnmatcher.matches();
}).collect(Collectors.toList());
for(Pathitem:paths){
System.out.println(item.toFile().getPath());
}
以上就是java正则表达式过滤文件的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!