java递归删除路径下的所有文件及文件夹

Help:
今天收到一个求助,朋友小明说接到一个需求其中的一部分内容是将整理的文件在
 C:xxx\Temp\下执行打包,当打包完成后删除原来整理的资料内容,包含文件夹
error:
小明写好代码后报错信息提示::  Unable to delete file ---无法删除文件
常规分析:
1.有可能有流对该文件进行操作

2.有可能有流对该文件操作完没有进行关流操作

3.有可能时外部进程或那个程序在占用该文件。

由于哥们朋友用的是内网开发,我也远程不了他,就用了最简单高效的判断方法,即找到文件的路径将提示删除不掉的文件手动进行删除,如果该文件有占用的话,系统会提示出来,经哥们朋友的一顿操作后发现好像是自己的代码写的有问题,那我又远程不了他,只能将代码写出来发给他进行验证,不过呢像这种java基础的东西可能也没有高大上而优雅的写法,我就用简单的java.io.File进行操作,感兴趣的小伙伴们可以一同来看看,当然还有其它更好更优雅的代码比如糊涂工具的那一套,本次就没有使用啦,因为不知道引入糊涂依赖哥们朋友那面的单位是否允许,好啦,废话少说,代码来啦

package com.kk;

import java.io.File;

public class TestDemo {
    public static void main(String[] args) {
        //定义待处理的文件夹路径
        String path = "D:\\A\\a.png"; 
        dealFiles(path);
    }

    /**
     * 递归处理某路径下的所有文件,文件夹
     *
     * @param clientBase
     */
    public static void dealFiles(String clientBase) {
        File file = new File(clientBase);
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            for (File item : files) {
                if (item.isDirectory()) {
                    //继续读取目录下文件或文件夹
                    dealFiles(item.getPath()); 
                } else {
                    rmFile(item);
                }
            }
        } else {
            rmFile(file);
        }
    }

    /**
     * 判断是否是以“.lastUpdated”结尾的文件,若是则删除
     * 或是“_remote.repositories”命名的文件,若是则删除
     *
     * @param file
     */
    public static void rmFile(File file) {
        if (file.getName().endsWith(".lastUpdated")) {
            file.delete();
            System.out.println("删除文件:" + file.getPath());
        } else if (file.getName().equals("_remote.repositories")) {
            file.delete();
            System.out.println("删除文件:" + file.getPath());
        }
    }
}

经过哥们朋友的验证反馈,nice,顺利删除文件后,高兴了一会后发现存放文件的文件夹没有删除掉,正在挠头的时候,修改的终版代码来啦

package com.kk;

import java.io.File;

public class TestDemo1 {

    public static void main(String[] args) {
        //待处理的文件夹路径
        String path = "D:\\A\\a.png";
        dealFiles(path);
    }

    /**
     * 递归处理某路径下的所有文件,文件夹
     *
     * @param clientBase
     */
    public static void dealFiles(String clientBase) {
        File file = new File(clientBase);
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            for (File item : files) {
                if (item.isDirectory()) {
                    //继续读取目录下文件或文件夹
                    dealFiles(item.getPath());
                } else {
                    rmFile(item);
                }
            }
            // 检查文件夹是否为空,如果为空则删除
            if (file.list().length == 0) {
                file.delete();
                System.out.println("删除文件夹:" + file.getPath());
            }
        } else {
            rmFile(file);
        }
    }

    /**
     * 判断是否是以“.lastUpdated”结尾的文件,若是则删除
     * 或是“_remote.repositories”命名的文件,若是则删除
     *
     * @param file
     */
    public static void rmFile(File file) {
        if (file.getName().endsWith(".lastUpdated")) {
            file.delete();
            System.out.println("删除文件:" + file.getPath());
        } else if (file.getName().equals("_remote.repositories")) {
            file.delete();
            System.out.println("删除文件:" + file.getPath());
        }
        // 检查文件所在的文件夹是否为空,如果为空则删除
        File parentFile = file.getParentFile();
        if (parentFile.list().length == 0 && parentFile.exists()) {
            parentFile.delete();
            System.out.println("删除文件夹:" + parentFile.getPath());
        }
    }
}

是不是很简单,好啦,就分享到这里啦,看了这么久送你句良言:

                                                    看似寻常最奇崛,成如容易却艰辛。

                                                                                                              不管用没有用,给个关注再走哈

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值