欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JAVA正则表达式过滤文件的实现方法

程序员文章站 2024-02-24 14:22:33
java正则表达式过滤文件的实现方法   正则表达式过滤文件列表,听起来简单,如果用java实现,还真需要一番周折,本文简析2种方式  1、适用...

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