这篇文章主要介绍了java正则表达式过滤文件的实现方法的相关资料,希望通过本文大家能够掌握理解这部分内容,需要的朋友可以参考下
java正则表达式过滤文件的实现方法
正则表达式过滤文件列表,听起来简单,如果用java实现,还真需要一番周折,本文简析2种方式
1、适用于路径确定,文件名时正则表达式的情况(jdk6的写法)
string filepattern = "/data/logs/.+\\.log";
file f = new file(filepattern);
file parentdir = f.getparentfile();
string regex = f.getname();
filesystem fs = filesystems.getdefault();
final pathmatcher matcher = fs.getpathmatcher("regex:" + regex);
directorystream.filter<path> filefilter = new directorystream.filter<path>() {
@override
public boolean accept(path entry) throws ioexception {
return matcher.matches(entry.getfilename()) && !files.isdirectory(entry);
}
};
list<file> result = lists.newarraylist();
try (directorystream<path> stream = files.newdirectorystream(parentdir.topath(), filefilter)) {
for (path entry : stream) {
result.add(entry.tofile());
}
} catch (ioexception e) {
e.printstacktrace();
}
for(file file : result) {
system.out.println(file.getparent() + "/" + file.getname());
}
2、适用于路径确定,文件名正则表达式的情况,这种正则表达式是java支持的表达式,而非系统(unix)文件系统表达式(jdk8写法)
path path = paths.get("/data/logs");
pattern pattern = pattern.compile("^.+\\.log");
list<path> paths = files.walk(path).filter(p -> {
//如果不是普通的文件,则过滤掉
if(!files.isregularfile(p)) {
return false;
}
file file = p.tofile();
matcher matcher = pattern.matcher(file.getname());
return matcher.matches();
}).collect(collectors.tolist());
for(path item : paths) {
system.out.println(item.tofile().getpath());
}
以上就是java中正则表达式实现过滤文件的方法的详细内容。