java 递归查找所有目录并且删除文件夹中包含temp的文件夹

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;
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值