首页 > 其他分享 >使用Files.walk删除文件

使用Files.walk删除文件

时间:2024-04-27 10:44:38浏览次数:13  
标签:Files 文件 删除 walk Boolean file isDeleted

摘要:使用Files.walk删除指定文件名的文件。

  使用Files.walk工具,递归判断指定目录中的常规文件路径名是否符合约定名称,如果满足条件就删除。

public class DelFile {
    // 文件名在此集合就删除
    private static Set<String> givenFileNames = new HashSet<>();

    public static void main(String[] args) {
        givenFileNames.add("更多课程联系微信:xxx.txt" );
        givenFileNames.add("更多课程联系QQ:Wiener.txt" );
        givenFileNames.add("微信:Wiener.png" );
        givenFileNames.add("QQ:xxx.jpg" );
        // 获取要批量重命名的文件目录
        String path = "/Users/楼兰胡杨";
//        传false时只打印满足条件的文件,传true时删除
        delByWalk(path, Boolean.FALSE);
//        deleteFileByGivenName(path);
    }

    public static void delByWalk(String givenDirName, Boolean isDeleted) {
        try (Stream<Path> givenPaths = Files.walk(Paths.get(givenDirName))) {
            // 筛选出常规文件
            List<String> result = givenPaths.filter(Files::isRegularFile)
                    //把path映射为路径名
                    .map(path -> path.toString())
                    // 筛选出符合条件的文件
                    .filter(fileName -> ifDeleted(new File(fileName), isDeleted))
                    .collect(Collectors.toList());

        } catch (Exception e) {
            System.out.println("--------");
        }
    }

    /**
     * 如果isDeleted=false时,可以正确打印文件名称。令isDeleted=true时,删除文件
     * Java 8之前的方法
     * @param file      文件
     * @param isDeleted true 可以删除
     * 
     */
    public static void deleteGivenFiles(File file, Boolean isDeleted) {
        if (file.isDirectory()) {
            // 如果是目录,就删除目录下所有的文件和文件夹
            File[] files = file.listFiles();
            // 遍历目录下的文件和文件夹
            for (File f : files) {
                // 如果是文件就删除
                if (f.isFile()) {
                    ifDeleted(f, isDeleted);
                } else if (file.isDirectory()) {
                    // 如果是文件夹就递归
                    deleteGivenFiles(f, isDeleted);
                }
            }
        } else if (file.isFile()) {
            ifDeleted(file, isDeleted);
        }

    }

    private static boolean ifDeleted(File oneFile, Boolean isDeleted) {
        String fileName = oneFile.getName();
        if (givenFileNames.contains(fileName)) {
            System.out.println("被删除的文件:" + oneFile.getPath());
            if (isDeleted) {
                oneFile.delete();
            }
            return Boolean.TRUE;
        }
        return Boolean.FALSE;
    }
}

函数ifDeleted(File oneFile, Boolean isDeleted)用于判断文件名是否符合预期,并根据isDeleted确认是否删除文件。通过对比可知,Java8的walk函数更简单,deleteGivenFiles很臃肿。

标签:Files,文件,删除,walk,Boolean,file,isDeleted
From: https://www.cnblogs.com/east7/p/18161808

相关文章

  • 数据结构_链表_双向循环链表的初始化、插入、删除、修改、查询打印(基于C语言实现)
    版本:2024年4月26日V1.0发布于博客园/***@filename:DoubleLinkedList.c*@brief:实现双向循环链表的相关功能*@author:[email protected]*@date:2024/04/26*@version:1.0*@note:*CopyRight(c)2023-2024RISE_AND......
  • 列表删除按钮,分页错位问题解决思路 table delete page loadTable
    列表删除按钮,分页错位问题解决思路this.$api('/xxx/xxx/deletexxx',{ids:id}).then(res=>{if(res.status!==20)returnthis.$Message.destroy()this.$Message.success('删除成功')if(this.tableData.leng......
  • Linux基础——LVM无法删除问题排查
    一、LVM可能被占用#查看lvm被占用中[root@harbor~]#dmsetupinfo-c|grepdata01data01-lvdata012532L--w010LVM-RjmtKrgddy0ejyeqJhVtr3IRsKkukLJNn6z4gQOC22jXKNgBcv92CN2P1f9AlcDS[root@harbor~]#lsblkNAME......
  • 【Qt专栏】C++删除空指针
    简短不看版:最佳实践if(pMyClass) //这里,pMyClass是指向某个类的指针..{deletepMyClass;pMyClass=NULL; //这句不能少}  完全可以....可能有不少人对Delete删除空指针的用法不屑一顾,但在实际运用当中, 却有不少人会犯类似的错误,最典......
  • 揭露 FileSystem 引起的线上 JVM 内存溢出问题
    作者:来自vivo互联网大数据团队-YeJidong本文主要介绍了由FileSystem类引起的一次线上内存泄漏导致内存溢出的问题分析解决全过程。内存泄漏定义(memoryleak):一个不再被程序使用的对象或变量还在内存中占有存储空间,JVM不能正常回收改对象或者变量。一次内存泄漏似乎不会有大......
  • VUE Element Plus-table动态添加删除行
     <template><divclass="app-container"><el-rowstyle="margin-top:20px"><el-col:span="24"style="border-left:5pxsolid#1d6ced;margin-bottom:10px"><labelstyle=......
  • SQL Server实战二:创建、修改、复制、删除数据库表并加以数据处理
      本文介绍基于MicrosoftSQLServer软件,实现数据库表的创建、修改、复制、删除与表数据处理的方法。目录1交互式创建数据库表T2交互式创建数据库表S3T-SQL创建数据库表C4T-SQL创建数据库表SC5T-SQL创建数据库表TC6交互式向数据库表S中添加新列NATIVE7交互式修改数据库......
  • 双向循环链表的删除、插入
    双向循环链表双向循环链表是一种特殊的链表结构,它结合了双向链表和循环链表的特点。在双向循环链表中,每个节点都有两个指针,一个指向前一个节点,另一个指向后一个节点,从而形成双向链接。同时,链表的头节点和尾节点相互链接,形成一个循环结构。这种结构使得双向循环链表在遍历和操作......
  • 关于双向循环列表的插入、删除、遍历
    目录双向循环链表公式初始化双向循环链表构建双向循环链表结构体//双向循环链表节点定义typedefstructdouble_loop_node{chardata[DATA_LEN];//数据域,存储数据长度structdouble_loop_node*next;......
  • PEcmd是一个命令行工具,用于执行各种操作系统和文件系统相关的任务。通常,它用于在Windo
    PECMD命令帮助-PECMD技术社区:www.pecmd.netPEcmd是一个命令行工具,用于执行各种操作系统和文件系统相关的任务。通常,它用于在Windows操作系统上执行各种文件和目录操作,例如文件复制、移动、删除等。PEcmd提供了一种简单而强大的方式来管理文件和目录,尤其是在自动化和批处......