1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | // 工具方法 private static FilenameFilter getFilter( final String mode) { return new FilenameFilter() { Pattern pattern; { pattern = Pattern.compile(mode); } public boolean accept(File file, String name) { return pattern.matcher(name).matches(); } }; } // 调用该接口, 可修改为返回 fs : File[] public static void find(File dir) { if (dir.isDirectory()) { File[] tfs = dir.listFiles(); // 复制子目录 File[] cfs = new File[tfs.length]; int count = 0 ; for (File fs : tfs) { if (fs.isDirectory()) { cfs[count++] = fs; } } // 递归遍历子目录 for ( int i = 0 ; i < count; i++) { find(cfs[i]); } // 将该目录下的所有文件夹匹配正则表达式 File[] fs = dir.listFiles(getFilter( ".+\\.java" )); /* // 由于需要递归, 所以不能在此创建匿名内部类, 而应使用单例 fs = dir.listFiles( new FilenameFilter() { Pattern pattern; // 匿名内部类的构造块 { pattern = Pattern.compile(".+\\.java"); } // 对于一个 File 数组, 将所有元素依次传入该回调函数, 以询问是否同意该元素加入集合, 其中 namne 等价于 f.getName() public boolean accept(File f, String name) { return pattern.matcher(name).matches(); } }); */ // 打印当前已筛选的文件的全路径 for (File f : fs) { try { System.out.println(f.getCanonicalPath()); } catch (IOException e) { e.printStackTrace(); } } } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步