Java文件操作(遍历目录中的文件,找到并删除有指定关键字的文件)

对于通过java对文件继续读取和写入的操作推荐看读取文件和写入文件操作

题目

扫描指定目录中的文件,并找到名称中包含指定字符的所有普通文件(不包括目录),并后续询问用户是否要删除该文件

题目分析

实际上题目就要求我们对一个指定的目录下的文件进行遍历,并找出文件名称中带有指定字符的普通文件,并询问用户是否需要删除该文件

代码展示

java 复制代码
package 文件操作;

import java.io.File;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: wuyulin
 * Date: 2023-08-07
 * Time: 11:23
 */

//文件操作练习
//扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包括目录),并后续询问用户是否要删除该文件
public class Demo5 {
    private static Scanner scanner=new Scanner(System.in);
    public static void main(String[] args) {
        System.out.print("请输入要进行查找的根目录路径:");
        //将用户输入的根目录地址作为参数实例化一个File类型的对象
        File rootDir=new File(scanner.next());
        if(!rootDir.isDirectory()){
            System.out.println("输入的路径不是一个合法目录");
            return;
        }
        System.out.print("请输入要删除的文件的关键字:");
        String word=scanner.next();
        //开始遍历目录中的数据
        recurDir(rootDir,word);
    }

    //通过深度优先遍历去递归遍历完目录中的数据
    private static void recurDir(File rootDir,String word){
        //通过listFiles方法获得rootDir根目录下的所有文件
        File[] files=rootDir.listFiles();
        //当目录是非法的目录,或是空的目录就直接return
        if(files==null||files.length==0){
            return;
        }
        for(File f:files){
            //打印每一个遍历到的文件的路径,进行监视
            System.out.println(f.getAbsolutePath());
            //当前遍历到的这个文件是目录的话就要递归进入这个目录,去遍历该目录中的内容
            if(f.isDirectory()){
                recurDir(f,word);
            }else { //当前遍历到的文件是普通文件,就要判断是否含有关键词,是否需要删除
                deleteFile(f,word);
            }
        }
    }

    private static void deleteFile(File file,String word){
        if(!file.getName().contains(word)){
            return;
        }
        System.out.println("找到了"+file.getAbsolutePath()+"文件,是否需要删除(Y/N)");
        String choice=scanner.next();
        //choice是一个String类型的对象,所以choice是一个引用,指向String对象所在内存空间的地址
        //所以String类型的对象进行比较要使用equals
        if(choice.equals("y")||choice.equals("Y")){
            file.delete();
        }
    }
}

1,首先对于指定目录下文件的遍历,采用的是深度优先遍历的思想,当我们遍历文件的时候要是遇到的是普通的文件,就判断名称是否含有指定字符,要是遇到目录,就要进行递归,进入目录中遍历该目录中的文件,继续进行相同的操作

2.通过目录对象调用listFiles方法可以获得该目录下所有的文件,将其存入文件数组中,遍历文件数组中的每一个文件,当该文件是目录,那么就要进行递归,进入该目录中进行相同的操作,要是该文件是普通文件,就要进行判断,询问用户,删除等操作

3.在deleteFile方法中,通过file.getName().contains(word)获得文件的名称并判断文件名称中是否含有指定字符word

4.当判断用户输入的时候由于choice是String类型,是对象,所以choice只是一个引用(地址),所以不能直接用==来判断是否相等,要通过调用equals方法才能判断值是否相等。

相关推荐
dengqingrui12343 分钟前
【树形DP】AT_dp_p Independent Set 题解
c++·学习·算法·深度优先·图论·dp
ok!ko2 小时前
设计模式之原型模式(通俗易懂--代码辅助理解【Java版】)
java·设计模式·原型模式
2402_857589362 小时前
“衣依”服装销售平台:Spring Boot框架的设计与实现
java·spring boot·后端
吾爱星辰3 小时前
Kotlin 处理字符串和正则表达式(二十一)
java·开发语言·jvm·正则表达式·kotlin
哎呦没3 小时前
大学生就业招聘:Spring Boot系统的架构分析
java·spring boot·后端
编程、小哥哥4 小时前
netty之Netty与SpringBoot整合
java·spring boot·spring
IT学长编程5 小时前
计算机毕业设计 玩具租赁系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·课程设计·毕业论文·计算机毕业设计选题·玩具租赁系统
莹雨潇潇5 小时前
Docker 快速入门(Ubuntu版)
java·前端·docker·容器
杨哥带你写代码5 小时前
足球青训俱乐部管理:Spring Boot技术驱动
java·spring boot·后端
我是哈哈hh6 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝