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); } }; List result=Lists.newArrayList(); try(DirectoryStream stream=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正则表达式过滤文件的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!