递归删除符合条件的目录,文件, kotlin,java

2023-10-31

package a

import java.io.IOException
import java.nio.file.*
import java.nio.file.attribute.BasicFileAttributes


fun main(args: Array<String>) {
    val path = Paths.get("F:\\杨旭升\\dev\\dev_java")
    remove_recursively(path, 0, { name ->
        name == "out" || name == "target" || name == "node_modules" || name == ".idea" || name == ".cache"
    }, { name ->
        name.endsWith(".iml")
    });
}

/*
  @author 张天笑
  @time 2019/1/24 10:35

  @path 起始目录
  @depth 遍历深度, 从根目录开始算 最多遍历几层文件夹
  @dir_condition 遍历到目录时执行的判断条件
  file_condition 遍历到文件时执行的判断条件
 */
fun remove_recursively(
    path: Path, depth: Int
    , dir_condition: (name: String) -> Boolean
    , file_condition: (name: String) -> Boolean
) {
    // 遍历限制深度100
    if (depth == 100) {
        return
    }
    try {
        Files.walkFileTree(path, object : SimpleFileVisitor<Path>() {

            // 访问成功的回调, 可能因为权限问题, 无法访问
            @Throws(IOException::class)
            override fun preVisitDirectory(dir: Path, attrs: BasicFileAttributes): FileVisitResult {
                // 第一个子目录对象是..
                if (dir == path) {
                    return FileVisitResult.CONTINUE
                }

                val file = dir.toFile()
                val name = file.name
                // 删除符合条件的文件夹
                if (dir_condition(name)) {
                    try {
                        println("删除目录: $file.absolutePath")
                        file.deleteRecursively()
                    } catch (e: Exception) {
                        println("删除失败:  ${file.absolutePath}")
                    }
                }
                // 递归遍历子文件夹
                else {
                    remove_recursively(dir, depth + 1, dir_condition, file_condition)
                }


                return FileVisitResult.CONTINUE
            }

            @Throws(IOException::class)
            override fun visitFile(path: Path, attrs: BasicFileAttributes): FileVisitResult {
                val file = path.toFile()
                val name = file.name
                if (file_condition(name)) {
                    // 删除符合条件的文件
                    try {
                        println("删除文件: ${file.absolutePath}")
                        file.delete()
                    } catch (e: Exception) {
                        println("删除失败:  ${file.absolutePath}")
                    }
                }
                return FileVisitResult.CONTINUE
            }

            @Throws(IOException::class)
            override fun visitFileFailed(file: Path, exc: IOException?): FileVisitResult {
                System.out.println(exc)
                return FileVisitResult.CONTINUE
            }

            @Throws(IOException::class)
            override fun postVisitDirectory(dir: Path, exc: IOException?): FileVisitResult {
                return super.postVisitDirectory(dir, exc)
            }
        })
    } catch (e: IOException) {
        e.printStackTrace()
    }

}

/*

$RECYCLE

* */

转载于:https://www.cnblogs.com/zhangtianxiao/p/10362779.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

递归删除符合条件的目录,文件, kotlin,java 的相关文章

随机推荐

  • leetcode 困难 —— 戳气球(超详细思路)

    题目 有 n 个气球 编号为 0 到 n 1 每个气球上都标有一个数字 这些数字存在数组 nums 中 现在要求你戳破所有的气球 戳破第 i 个气球 你可以获得 nums i 1 nums i nums i 1 枚硬币 这里的 i 1 和
  • c++学习之多继承

    1 多继承语法 class Son public Base1 public Base2 2 当base1和base2出项同名成员时 子类使用时要加作用域区分 Son s s Base1 m A s Base2 m B
  • 计算机网络——网络层之路由选择协议

    参考链接 CSKAOYAN COM 路由选择协议 自治系统AS 由于 1 因特网规模很大 2 许多单位不想让外界知道自己的路由选择协议 但还想连入因特网 于是产生了自治系统AS 在单一的技术管理下的一组路由器 而这些路由器使用一种AS内部的
  • 前段后端项目放在不同服务器上,将后端和前端服务放在开发中的同一个Web服务器后面...

    我做了一个具有相同堆栈的项目 就我而言 整个前端位于Django项目目录中的一个名为static的文件夹中 这个静态文件夹被定义为Django项目的settings py文件中的静态根目录 那么 什么情况是 第一个HTML文件 说的inde
  • Spring Boot2.0配置Druid数据库连接池(单数据源、多数据源、数据监控)

    我这里使用的开发环境是 IDEA 2017 JDK 1 8 Maven 3 3 9 SpringBoot 使用的是2 0 3版本 详细创建过程可以参考 https blog csdn net qq 38455201 article deta
  • C语言(C++)作业

    一 指针和内存泄露 1 malloc函数 malloc的全称是memory allocation 中文叫动态内存分配 用于申请一块连续的指定大小的内存块区域以void 类型返回分配的内存区域地址 当无法知道内存具体位置的时候 想要绑定真正的
  • 最长公共前后缀

    最长公共前后缀 字符串的前缀是指不包含最后一个字符的所有以第一个字符开头的连续子串 后缀是指不包含第一个字符的所有以最后一个字符结尾的连续子串 例如对于字符串 abacaba 其前缀有 a ab aba abac abacab 后缀有bac
  • tf2.2和tf2.4默认的cuda版本

    tf2 2和tf2 4默认的cuda版本 tf2 4默认适配cuda11 tf2 2默认适配cuda10 1 实测清华源可以直接 conda install cudatoolkit 11 0 cudnn 8
  • Scrum认证Scrum Master(CSM)认证课

    课程简介 Scrum是目前运用最为广泛的敏捷开发方法 是一个轻量级的项目管理和产品研发管理框架 旨在最短时间内交付最大价值 根据2021年全球敏捷状态报告 Scrum及Scrum衍生方法的应用占比达到81 在企业的敏捷转型历程中 Scrum
  • Mock.js 前端数据模拟工具

    什么是Mock js Mock js是一个功能强大的模拟数据生成器 它可以帮助开发者在前端开发过程中模拟后端数据 使得前端开发者可以在后端接口尚未完成的情况下进行开发 这极大地提高了开发效率 为什么要使用Mock js 在传统的前后端协同开
  • 【Linux】高级IO和多路转接

    多路转接和高级IO 咳咳 写的时候出了点问题 标点符号全乱了 批量替换了几次 干脆就把全文的逗号和句号都改成英文的了 不然代码块里面的代码都是中文标点就跑不动了 1 高级IO 1 1 五种IO模型 用钓鱼佬的栗子 来看看五种不同的IO模型吧
  • 新一代烧写工具—STM32CubeProgrammer!

    STM32CubeProgrammer STM32CubeProg 是STM32微控制器的专用编程工具 STM32用户都知道 当完成程序调试 需要对芯片进行程序代码烧录编程 一般会有三个选择 通过调试接口 JTAG SWD 来烧写程序 一般
  • 漏洞扫描服务内容、方式以及流程一篇了解

    漏洞扫描是指基于漏洞数据库 通过扫描工具 人工的方式对客户信息系统的资产 包含网络设备 安全设备 主机系统 web应用 数据库系统等 进行全面 深入的安全脆弱性检测 检测完成后为客户输出可参考的分析报告及修复方案 具体服务内容 方式以及流程
  • C语言,实现字符串移动,例如char str[]=“AGAB%Sr67gs5ffwt+%“ 得到结果是“AABGS567grstw%%+“

    实现字符串移动 例如char str AGAB Sr67gs5ffwt 得到结果是 AABGS567grstw 1 1 先对字符串实现升序排序 voidSort char p int n 1 2 从字符串中挑出大写 char DaXie c
  • boot-admin整合Quartz实现动态管理定时任务

    淄博烧烤爆红出了圈 当你坐在八大局的烧烤摊 面前是火炉 烤串 小饼和蘸料 音乐响起 啤酒倒满 烧烤灵魂的party即将开场的时候 你系统中的Scheduler 调试器 也自动根据设定的Trigger 触发器 从容优雅的启动了一系列的Job
  • Taro转支付宝小程序问题总结

    1 ios系统出现跳转两次的问题 解决 新建project alipay json 中设置 enableAppxNg true enableNodeModuleBabelTransform true 2 二级页面 页面凹陷进顶部 导航栏透明
  • [机器学习与scikit-learn-34]:算法-分类-支持向量机SVM的基本简介与基本原理-线性分类

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 123778715 目录 第1章 支持向
  • 一个项目的基本要素都有哪些?

    在规划项目时 必须要慎重考虑项目的五要素 那么项目的五要素是什么 一个成功的项目经理必须对这五个要素有相当程度的了解 才能更好更高效的完成项目 在五个要素中 项目的范围和组织结构为最基本要素 质量 时间 成本是约束要素 1 项目的范围 项目
  • JDBC纯驱动方式连接MySQL

    1 新建一个名为MysqlDemo的Java Project 2 从http dev mysql com downloads connector j 中下载最新的驱动包 这里有 tar gz和 zip两种格式的包 因为在windows下都可
  • 递归删除符合条件的目录,文件, kotlin,java

    package a import java io IOException import java nio file import java nio file attribute BasicFileAttributes fun main ar