【java IO】经典习题:1、打印出指定起始路径下包含指定词的所有文件的全路径 2、给定指定路径,将该目录下的文件按照树形结构打印出来

java IO (File类习题)

一、搜索功能

要求:
1、指定起始路径下包含指定词的所有文件
2、打印出全路径

  • 例如:
    • 目录结构如下:
    • /user/a/a1.java
    • /user/a/a2.java
    • /user/java/j1.java
    • /user/java/a.txt
    • /user/java/b.mp4
    • /user/file/java11.txt
    • /user/file/.java34.txt
    • 打印/user目录下含java的文件,搜索结果如下
    • /user/a/a1.java
    • /user/a/a2.java
    • /user/java/j1.java
    • /user/file/java11.txt
      a因为在指定目录下搜索,所以肯定要用到循环,如果此路径下的是文件直接打印出绝对路径,然后如果当前路径是目录,则需要递归调用此搜索函数(先判断是否是文件,再判断是否是路径)
      b既然要过滤关键字,就要用到FilenameFilter接口,重写accpt函数,把需要的文件过滤出来
      c这里需要在for循环数组那里进行非空判断,如果是空会出现空指针异常
 public static void seachFile(String path, String filter){

        File file =new File(path );
        if(!file .exists() ){//如果此路径不存在,直接返回
             return ;
        }
        if(file .isFile() &&file .getName() .contains(filter ) ){//如果此路径就是文件,而且文件名字包含filter,直接输出路径
            System.out.println(file .getAbsolutePath() );
            return ;
        }
        if(file .isDirectory() ){//如果此路径是目录,则进入递归函数
            seachFile(file ,filter );
        }
    }
    public static void seachFile(File  file, String filter){
        FilenameFilter filenameFilter =new FilenameFilter() {//文件过滤器,过滤出是文件的file
            @Override
            public boolean accept(File dir, String name) {
                File file1 =new File(dir ,name);
                return file1 .isFile() ;
            }
        };
        File []list=file .listFiles(filenameFilter );
        if(list ==null){//避免出现NullPointError异常,(当前file没有文件时,数组为空)
            return ;
        }
        for(int i=0;i<list .length ;i++){
            File path=list [i];
            if(path .getName() .contains(filter ) ){
                System.out.println(path .getAbsolutePath() );
            }
        }

        FilenameFilter direFilter=new FilenameFilter() {//文件过滤器 过滤出是目录的file
            @Override
            public boolean accept(File dir, String name) {
                File file1 =new File(dir ,name );
                return file1 .isDirectory() ;
            }
        };
        File [] dire=file .listFiles(direFilter );
        for(int i=0;i<dire .length ;i++){
            File file1 =dire [i];
            seachFile(file1 ,filter );//调用自己,继续找里面含filter的文件
        }

    }

二、树形打印

要求:
给定指定目录,将该目录下的文件按照树形结构打印出来

-一级目录
–二级目录
—三级目录
----四级目录

a这个题和级数有关,每升一级多打印一个“-”,如果第一次访问是文件打印“-”+path,访问的是目录打印“–”+path,这相当于给自己挖了一个坑,代码永远写不完,所以和上一题方法一样,用递归,层数和“-”的数量成正比,每次进来函数判断层数就可以,
b这道题只需要打印出全部文件就可以了,所以不需要文件搜索器

 public static void PrintPath(String path,int fLevel){
        File file = new File(path);
        if(!file .exists() ) {//如果路径不存在,直接返回
            return;
        }
        for(int i=0;i<fLevel ;i++){//判断层数
            System.out.print("-");
        }
        if(file .isFile() ){//如果是文件直接输出文件名
            System.out.println(file .getName() );
        }
        if(file .isDirectory() ){//如果是目录,调用自己
            File []list=file .listFiles() ;
            if(list ==null){//当当前file没有目录时,则数组为空
                return ;
            }
            for(int i=0;i<list.length  ;i++){
                PrintPath(list [i].toString() ,fLevel +1) ;
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值