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 list = getFileList("c:/fakepath/", true);
System.out.println(list.size());
}
public static List getFileList(String path, boolean isSortDesc) {
List 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 getFileList(String path) {
List 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 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;
}
}