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

Posted zhangtianxiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归删除符合条件的目录,文件, kotlin,java相关的知识,希望对你有一定的参考价值。

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

* */

以上是关于递归删除符合条件的目录,文件, kotlin,java的主要内容,如果未能解决你的问题,请参考以下文章

shell练习-对指定目录下的符合条件的文件执行操作

删除所有符合条件的文件夹及其内容[关闭]

如何在当前目录下打开.DBF文件,将符合条件的记录复制到另一个.DBF文件中

java 如何递归遍历多重目录下的指定格式文件复制到目标目录并改格式

MongoDB笔记 删除操作(详细)

linux文件夹下递归执行脚本/程序