import java.io.*;
import java.util.regex.*;
/**
* 实现fileFilter接口
* 作用:File类的listFiles()将调用
* 为了过滤文件
* */
class filterFile implements FileFilter {
public boolean accept(File pathname) {
return pathname.isDirectory();
}
}
public class DeleteTempDir {
//fileSum用于存储处理文件夹的总数
static int fileSum = 0;
//fileSuccess用于存储成功删除的文件夹数
static int fileSuccess = 0;
//fileFaild用于存储删除失败的文件夹数
static int fileFaild = 0;
/**
* 我觉的有必要提醒大家的是
* 给main方法传参的时候,如果参数有空格的
* 的话那么用双引引起来,如果不引那么有几个空
* 格,参数就是空格+1的个数..............
* */
public static void main(String[] args) throws IOException {
String mainDir = null;
if (args.length == 0) {
//这是默认要处理的路径
mainDir = "c:/Documents and Settings";
startProcess(mainDir);
} else {
for (String strParam : args) {
startProcess(strParam);
}
}
System.out.println("处理文件夹总数: " + fileSum + " 个");
System.out.println("成功删除文件夹: " + fileSuccess + " 个");
System.out.println("文件夹删除失败: " + fileFaild + " 个");
}
private static void startProcess(String mainDir) {
DeleteTempDir obj = new DeleteTempDir();
//用于清除temp的目录
File file = new File(mainDir);
//过滤掉文件,只显示目录
obj.iteratorDir(file.listFiles(new filterFile()));
}
/**
* method:iteratorDir
* 作用:遍历给定的目录以及所有的子目录,掉用相应的方法,把符合条件
* 的文件夹删除
* @param listFiles:File类型的数组
* 作用域:private
* return:void
* */
private void iteratorDir(File[] listFiles) {
if (listFiles == null) {
listFiles = new File[0];
}
for (File file : listFiles) {
fileSum++;
if (!deleteDir(file.getName(), file.getAbsolutePath())) {
//过滤掉文件,只显示目录
iteratorDir(file.listFiles(new filterFile()));
}
}
}
/**
* method:deleteDir
* 作用:把符合条件的目录删除
* @param dirName:文件夹名
* @param dirAbsolute
* 作用域:private
* return boolean:删除成功返回true,否则返回false
* */
private boolean deleteDir(String dirName, String dirAbsolute) {
Pattern pattern = Pattern.compile("\\w*(temp|Temp|TEMP)\\w*");
if (pattern.matcher(dirName).find()) {
File deleteFile = new File(dirAbsolute);
if (deleteFile.delete()) {
System.out.println(dirAbsolute + " 删除成功!!");
fileSuccess++;
return true;
} else {
fileFaild++;
System.out.println(dirAbsolute + " 无法删除 原因可能是系统文件夹!!");
}
}
return false;
}
}