方法一:
public static void deleteFiles(File srcFile) {
if (srcFile.exists()) {
//存放文件夹
LinkedList<File> directories = new LinkedList<>();
ArrayList<File> directoryList = new ArrayList<>();
if (srcFile.isDirectory()) {
directories.add(srcFile);
} else {
srcFile.delete();
}
while (directories.size() > 0) {
File[] files = directories.removeFirst().listFiles();
if (files != null) {
for (File f : files) {
if (f.isDirectory()) {
directories.add(f);
directoryList.add(f);
} else {
f.delete();
}
}
}
}
//这时所有非文件夹都删光了,可以直接删文件夹了(注意从后往前遍历)
for (int j = directoryList.size() - 1; j >= 0; j--) {
directoryList.get(j).delete();
}
}
}
方法二: 用do…while循环
public static void deleteFiles(File srcFile) {
if (srcFile.exists()) {
//存放文件夹
LinkedList<File> directories = new LinkedList<>();
ArrayList<File> directoryList = new ArrayList<>();
do {
File[] files = directories.size() > 0 ? directories.removeFirst().listFiles() : new File[]{srcFile};
if (files != null) {
for (File f : files) {
if (f.isDirectory()) {
directories.add(f);
directoryList.add(f);
} else {
f.delete();
}
}
}
} while (directories.size() > 0);
//这时所有非文件夹都删光了,可以直接删文件夹了(注意从后往前遍历)
for (int i = directoryList.size() - 1; i >= 0; i--) {
directoryList.get(i).delete();
}
}
}
本文介绍两种使用Java批量删除包含子文件夹的文件夹的方法。第一种方法使用LinkedList和ArrayList分别存储文件夹和文件,通过while循环递归删除。第二种方法改进循环逻辑,使用do...while循环实现同样的功能。两种方法均先删除文件再删除空文件夹,确保彻底清理。
978





