/** * 获取指定目录下的所有某个后缀的文件 * * @param directoryPath 指定的目录路径 * @param fileSuffixFilter 需要过滤的后缀,用分号分隔 * @return 文件列表 */ public static List<String> getAppointFiles(String directoryPath, String fileSuffixFilter) { List<String> fileList = new ArrayList<>(); String[] fileSuffixArray = new String[]{}; if (fileSuffixFilter != null && !fileSuffixFilter.isEmpty()) { fileSuffixArray = fileSuffixFilter.split(";"); } File directory = new File(directoryPath); if (directory.isDirectory()) { getFileList(directoryPath, directory, fileSuffixArray, fileList); } return fileList; } /** * 获取指定目录下的所有某个后缀的文件 * * @param rootPath 根目录路径 * @param directory 指定的目录 * @param fileSuffixArray 需要过滤的后缀 * @param fileList 文件列表 */ private static void getFileList(String rootPath, File directory, String[] fileSuffixArray, List<String> fileList) { File[] files = directory.listFiles(); if (files != null) { boolean applySuffixFilter = fileSuffixArray.length > 0; for (File file : files) { if (file.isFile()) { if (applySuffixFilter) { if (endsWithAny(file.getName(), fileSuffixArray)) { fileList.add(getRelativePath(rootPath, file.getAbsolutePath())); } } else { fileList.add(getRelativePath(rootPath, file.getAbsolutePath())); } } else if (file.isDirectory()) { // 递归遍历子文件夹 getFileList(rootPath, file, fileSuffixArray, fileList); } } } } /** * 获取相对于根目录的路径 * * @param rootPath 根目录路径 * @param fullPath 完整路径 * @return 相对于根目录的路径 */ private static String getRelativePath(String rootPath, String fullPath) { Path root = Paths.get(rootPath); Path full = Paths.get(fullPath); return root.relativize(full).toString(); } /** * 判断文件名是否以给定的后缀结尾 * * @param fileName 文件名 * @param suffixArray 后缀数组 * @return 如果文件名以给定的后缀结尾,返回true;否则返回false。 */ private static boolean endsWithAny(String fileName, String[] suffixes) { for (String suffix : suffixes) { if (fileName.endsWith(suffix)) { return true; } } return false; }
12-05
729
06-05
606
12-04
5488
04-07