8/22 Java学习博客 文件练习

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

先分析得出
1.list 列出目录内容

2.判定文件类型

3.删除文件

找到目录中的所有文件,以及子目录中的所有文件.只要遇到子目录都能往里找,用"递归"的方式,把所有的子目录都给扫描一遍~~

 public static Scanner scanner = new Scanner(System.in);

 //1.先让用户输入要扫描的目录

        System.out.println("请输入要扫描的路径:");
        String path = scanner.next();

        File rootPath = new File(path);
        if(!rootPath.isDirectory()){
            System.out.println("您输入的扫描的路径有误!!!");
            return;
        }

        //2.再让用户输入一个要扫描的关键词
        System.out.println("请输入要删除文件的关键词:");
        String word = scanner.next();

咱们写代码的时候,要对于用户输入的内容进行合法性检查!!!

然后进行递归扫描
scanDir(rootPath,word);

开始写scanDir方法

  private static void scanDir(File rootPath, String word) {
        //1.先列出rootPath中所有的文件和目录
        File[] files = rootPath.listFiles();
        if(files==null ){
            return;
        }
/*这里用list和listFIles都行,listFIles返回File【】,list返回String数组,File对象更方便*/

//2.遍历每一个元素,针对不同类型作出不同处理
        for (File f : files) {
            //价格日志,方便当前递归的过程
            System.out.println("当前扫描的文件"+f.getAbsolutePath());
            if(f.isFile()){
                //普通文件,检查文件是否要删除 并执行删除
                checkDelete(f,word);
            }else{
                //目录,递归的再去判定子目录里的内容
                scanDir(f,word);
            }
        }
    }

最后实现checkDelete方法

private static void checkDelete(File f, String word) {
        if(!f.getName().contains(word)){
            //不必删除直接方法结束
            return;
        }
        //需要删除
        System.out.println("当前文件为:"+f.getAbsolutePath()+",请确认是否删除(Y/N):");
        String choice = scanner.next();
        if(choice.equals("Y")){
            f.delete();
            System.out.println("删除完毕");
        }else{
            f.delete();
            System.out.println("取消删除");
        }

    }

这样这个练习就写好了

完整代码

package IO;

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

public class Demo13 {
    public static Scanner scanner = new Scanner(System.in);
    public static void main(String[] args) {
        //1.先让用户输入要扫描的目录

        System.out.println("请输入要扫描的路径:");
        String path = scanner.next();

        File rootPath = new File(path);
        if(!rootPath.isDirectory()){
            System.out.println("您输入的扫描的路径有误!!!");
            return;
        }

        //2.再让用户输入一个要扫描的关键词
        System.out.println("请输入要删除文件的关键词:");
        String word = scanner.next();
        //3.可以进行递归扫描了
        //使用这个方法进行递归
        scanDir(rootPath,word);

    }

    private static void scanDir(File rootPath, String word) {
        //1.先列出rootPath中所有的文件和目录
        File[] files = rootPath.listFiles();
        if(files==null ){
            return;
        }
        //2.遍历每一个元素,针对不同类型作出不同处理
        for (File f : files) {
            //价格日志,方便当前递归的过程
            System.out.println("当前扫描的文件"+f.getAbsolutePath());
            if(f.isFile()){
                //普通文件,检查文件是否要删除 并执行删除
                checkDelete(f,word);
            }else{
                //目录,递归的再去判定子目录里的内容
                scanDir(f,word);
            }
        }
    }

    private static void checkDelete(File f, String word) {
        if(!f.getName().contains(word)){
            //不必删除直接方法结束
            return;
        }
        //需要删除
        System.out.println("当前文件为:"+f.getAbsolutePath()+",请确认是否删除(Y/N):");
        String choice = scanner.next();
        if(choice.equals("Y")){
            f.delete();
            System.out.println("删除完毕");
        }else{
            f.delete();
            System.out.println("取消删除");
        }

    }
}
posted @ 2026-08-30 19:48  曾章吉的浩吧  阅读(4)  评论(0)    收藏  举报