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方法才能判断值是否相等。

相关推荐
程序定小飞18 分钟前
基于springboot的学院班级回忆录的设计与实现
java·vue.js·spring boot·后端·spring
攀小黑29 分钟前
基于若依-内容管理动态修改,通过路由字典配置动态管理
java·vue.js·spring boot·前端框架·ruoyi
青云交1 小时前
Java 大视界 -- 基于 Java 的大数据可视化在城市空气质量监测与污染溯源中的应用
java·spark·lstm·可视化·java 大数据·空气质量监测·污染溯源
森语林溪1 小时前
大数据环境搭建从零开始(十七):JDK 17 安装与配置完整指南
java·大数据·开发语言·centos·vmware·软件需求·虚拟机
郝开2 小时前
Spring Boot 2.7.18(最终 2.x 系列版本)1 - 技术选型:连接池技术选型对比;接口文档技术选型对比
java·spring boot·spring
小猪咪piggy3 小时前
【项目】小型支付商城 MVC/DDD
java·jvm·数据库
知兀3 小时前
【Spring/SpringBoot】SSM(Spring+Spring MVC+Mybatis)方案、各部分职责、与Springboot关系
java·spring boot·spring
向葭奔赴♡3 小时前
Spring IOC/DI 与 MVC 从入门到实战
java·开发语言
早退的程序员3 小时前
记一次 Maven 3.8.3 无法下载 HTTP 仓库依赖的排查历程
java·http·maven
向阳而生,一路生花3 小时前
redis离线安装
java·数据库·redis