importorg.slf4j.Logger; importorg.slf4j.LoggerFactory; importjava.io.File; importjava.nio.file.DirectoryStream; importjava.nio.file.Files; importjava.nio.file.Path; importjava.nio.file.Paths; publicclassTestDirectoryFileMain { privatestaticfinalLoggerLOGGER=LoggerFactory.getLogger(TestDirectoryFileMain.class); publicstaticvoidmain(String []args) throwsException { Stringpath="C:\\Windows\\System32"; PathsourcePath=Paths.get(path); StringfilenameReg="kd_*_*.dll"; System.out.println("======Files.newDirectoryStream======"); longstart=System.currentTimeMillis(); try(DirectoryStream<Path>newStream=Files.newDirectoryStream(sourcePath,filenameReg)){ newStream.forEach(x-> { System.out.println(x.getFileName().toString()); }); } System.out.println(System.currentTimeMillis()-start); System.out.println("======dir.listFiles()======"); longstart2=System.currentTimeMillis(); Filedir=newFile(path); File[] files=dir.listFiles(); for(Filefile:files){ if(file.getName().matches("kd_[\\w]*_[\\w]*.dll")){ System.out.println(file.getName()); } } System.out.println(System.currentTimeMillis()-start2); } }
直接上代码,上面是globbing pattern通配符的实现,下面是Regex正则表达式的实现,执行结果输出都是一样的,在代码中的目录下Regex正则表达式反而更快一些,不知道在这里是不是与目录下的文件数量有关,这里不是为了验证哪个性能更高,只是探索几种方式实现查询目录下符合指定规则文件名的文件有哪些,也是为了满足实际业务需求。globbing pattern通配符很简洁,对性能没要求的情况下推荐使用。