给定一个目录,找到目录中满足条件的文件的所有绝对路径:
一、定义一个静态方法,支持自定义过滤文件的逻辑
Function接口支持范型,第一个是方法的入参类型,第二个是方法的出参类型:Function<File[],Map<String,String>>
public static Map<String,String> getFilesFullPath(String dirPrefix, Function<File[],Map<String,String>> function){ if(StringUtils.isEmpty(dirPrefix)){ log.info("目录不存在:{}",dirPrefix); return null; } File dir = new File(dirPrefix); if(!dir.exists()){ log.info("目录不存在:{}",dirPrefix); return null; } // 当前层的文件 不用目录 File[] sub = dir.listFiles(File::isFile); if(sub == null || sub.length==0){ log.info("目录下没有文件:{}",dirPrefix); return null; } return function.apply(sub); }
定义一个调用方,并自定义过滤逻辑
找到pathPrefix目录中,所有以fileSurfix结尾的文件
private Map<String, String> getValidFullPath(String pathPrefix, String fileSurfix){ Map<String, String> filesFullPath = FileIOUtils.getFilesFullPath(pathPrefix, files -> { Map<String, String> map = new HashMap<>(); for (File file : files) { if (!file.getName().endsWith(fileSurfix)) { continue; } // 去除文件名的后缀fileSurfix获得门店id String shopId = file.getName().replace(fileSurfix, ""); if (shopId.length() != 4) { continue; } // 保存每个门店id对应的文件的绝对路径 map.put(shopId, file.getAbsolutePath()); } return map; }); return filesFullPath; }