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

你可能感兴趣的:(java,深度优先,文件操作)