FileUtil.java
import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.LinkedList; import java.util.List; public class FileUtil { public static void main(String[] args) { List<File> list = getFileList("c:/fakepath/", true); System.out.println(list.size()); } public static List<File> getFileList(String path, boolean isSortDesc) { List<File> list = getFileList(path); if (isSortDesc) { list.sort(Comparator.comparing(File::getAbsolutePath)); } else { list.sort((f1, f2) -> f2.getAbsolutePath().compareTo(f1.getAbsolutePath())); } return list; } public static List<File> getFileList(String path) { List<File> rsList = new ArrayList<>(); if (path == null || path.equals("")) { System.out.println("Error: path is blank."); return rsList; } File file = new File(path); if (!file.exists()) { System.out.println("Error: path is not existed."); return rsList; } // 处理文件 if (file.isFile()) { System.out.println("Info: Only has a file."); rsList.add(file); return rsList; } // 处理文件夹 if (null == file.listFiles()) { System.out.println("Info: Only has a empty directory."); rsList.add(file); return rsList; } int fileNum = 0; int folderNum = 0; LinkedList<File> forDealList = new LinkedList<>(); forDealList.addAll(Arrays.asList(file.listFiles())); while (!forDealList.isEmpty()) { File firstFile = forDealList.removeFirst(); // 把文件自身先加入结果 rsList.add(firstFile); // 处理文件 if (firstFile.isFile()) { // System.out.println("文件:" + firstFile.getAbsolutePath()); fileNum++; continue; } // 处理文件夹 folderNum++; // System.out.println("文件夹:" + firstFile.getAbsolutePath()); File[] files = firstFile.listFiles(); if (files == null) { continue; } for (File curr : files) { if (curr.isDirectory()) { // 将此文件夹放入待处理列表 forDealList.add(curr); } else { rsList.add(curr); // System.out.println("文件:" + curr.getAbsolutePath()); fileNum++; } } } System.out.println("文件夹数量:" + folderNum + ",文件数量:" + fileNum); return rsList; } }
le.li