File对文件的删除、搜索、统计操作

目录

 搜索文件或文件夹及应用

 删除某个文件夹,将文件夹中的内容全部清空后删除

统计某个文件夹中各类文件共有多少,并将其添加到map集合中


 搜索文件或文件夹及应用

搜索某个文件或文件夹所在的路径

在某个盘符下搜索文件,如果是应用程序,将其打开

public class Test1 {
    public static void main(String[] args) throws Exception {
        searchFile(new File("D:/"), "QQ.exe");
    }

    public static void searchFile(File dir, String fileName) throws Exception {
        if (dir == null || !dir.exists() || dir.isFile()) {
            return; // 代表无法搜索
        }

        File[] files = dir.listFiles();

        if (files != null && files.length > 0) {
            for (File f : files) {
                if (f.isFile()) {
                    //如果是文件夹的话将isFile替换为isDirectory
                    if (f.getName().contains(fileName)) {
                        System.out.println("找到了:" + f.getAbsolutePath());
                        //如果只是文件或文件夹可不执行以下操作
                        Runtime runtime = Runtime.getRuntime();
                        runtime.exec(f.getAbsolutePath());
                    }
                } else {
                    searchFile(f, fileName);
                }
            }
        }
    }
}

 删除某个文件夹,将文件夹中的内容全部清空后删除

删除非空文件夹时,优先遍历删除内部所有的文件,再将其删除,会使用到建议的递归思想.

public class Test2 {
    public static void main(String[] args) {
        deleteDir(new File("E:\\BB\\zhanghan"));
    }

    public static void deleteDir(File src){
        //若不知道是否为空,可以先判断一下
        if (src == null || !src.exists() || src.isFile()) {
            return; // 代表无法搜索
        }
        //返回指定路径下,所有File对象数组
        File[] files = src.listFiles();
        //遍历数组,得到每一个File对象
        for (File file : files) {
            //判断如果是文件,直接删除
            if (file.isFile()){
                file.delete();
            }else {
                //判断如果是文件夹,递归继续判断
                deleteDir(file);
            }
            file.delete();
        }
        //遍历结束代表目标文件夹空了,删除src
        src.delete();
    }
}

统计某个文件夹中各类文件共有多少,并将其添加到map集合中

public class Test3 {
    public static void main(String[] args) {
        File file = new File("E:\\BB\\zhanghan");
        //创建集合用于收集数据
        HashMap<String, Integer> map = new HashMap<>();
        count(map, file);
        System.out.println(map);
    }

    public static void count(HashMap<String, Integer> map, File file) {
        //将文件对象下所有的一级文件对象统计到一个集合中
        File[] files = file.listFiles();        
        //遍历集合
        for (File f : files) {
            //判断是否为文件
            if (f.isFile()) {
                //获取对象名
                String name = f.getName();
                String[] fileNameArr = name.split("\\.");
                //使用点号.作为分隔符,需要在点号前面加上反斜杠\进行转义,否则点号会被解析成正则表达式中的任意字符匹配符号,而不是作为分隔符使用。因此,使用点号作为分隔符时,需要在前面加上两个反斜杠\\进行转义.
                if (fileNameArr.length == 2) {//必须等于2才行,不然有的分割为两个以上字符,其中包含不同的后缀,可能会导致结果出错
                    String endName = fileNameArr[1];
                    if (map.containsKey(endName)) {
                        Integer count = map.get(endName);
                        //包含文件后缀,将数字加一,并将其重新添加入集合中,将之前的数据覆盖
                        count++;
                        map.put(endName, count);
                    } else {
                        map.put(endName, 1);
                    }
                }
            } else {
                count(map, f);
            }
        }
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值