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

相关推荐
苏瞳儿3 小时前
java对数据库的增删改查
java·数据库·oracle
zhangjw343 小时前
Java基础语法:变量、数据类型与运算符,从原理到实战
java·开发语言
yaoxin5211236 小时前
384. Java IO API - Java 文件复制工具:Copy 示例完整解析
java·开发语言·python
NotFound4866 小时前
实战指南如何实现Java Web 拦截机制:Filter 与 Interceptor 深度分享
java·开发语言·前端
一 乐8 小时前
医院挂号|基于springboot + vue医院挂号管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·医院挂号管理系统
鱼鳞_8 小时前
Java学习笔记_Day29(异常)
java·笔记·学习
烟锁池塘柳08 小时前
一文讲透 C++ / Java 中方法重载(Overload)与方法重写(Override)在调用时机等方面的区别
java·c++·面向对象
一叶飘零_sweeeet8 小时前
深入拆解 Fork/Join 框架:核心原理、分治模型与参数调优实战
java·并发编程
云烟成雨TD8 小时前
Spring AI Alibaba 1.x 系列【23】短期记忆
java·人工智能·spring
摇滚侠9 小时前
帮我整理一份 IDEA 开发中常用快捷键
java·ide·intellij-idea