【Java SE进阶】Day08 File类、递归

一、File类

1、概述java.io.File

  • 文件和路径的抽象表示
  • 用于文件和目录的创建、查找和删除等
  • 分类
    • file--文件
    • directory--文件夹/目录
    • path--路径

2、静态成员变量

  • pathSeparator/pathSeparatorChar:路径分隔符(;)
  • separator/separatorChar:名称分隔符
    • Linux:/
    • Windows:\

3、绝对路径和相对路径

  • 相对:相对于项目的根目录
  • 路径不区分大小写,(Java语言中)双反斜杠表示转义字符

4、构造方法

  • File(File parent, String child) 
  • File(String parent, String child) 
  • File(String pathname) 
  • File(URI uri) 

5、获取方法

  • getAbsolutePath() :绝对路径 
  • getPath():转换为路径字符串
  • getName():返回文件和目录名
  • length():返回文件长度

6、判断方法

  • exists()
  • isDirectory():目录
  • isFile() 

7、增删方法

  • createNewFile() :若不存在,则创建
  • delete()
  • mkdir():创建单级目录
  • mkdirs()

8、遍历功能

  • list():返回子文件和目录
  • listFiles():返回带路径的子文件和目录

二、递归

1、概述

  • 直接递归
  • 间接递归
  • 注意:次数不宜过多,否则会产生栈内存溢出

2、打印多级目录

public static void getAllFile(File dir){
        //递归打印目录
        System.out.println(dir);
        File[] files=dir.listFiles();
        for (File f:files) {
            if(f.isDirectory()){
                getAllFile(f);
            }
            else{
                System.out.println(f);
            }
        }
    }

三、综合案例

1、文件搜索:搜索D:\aaa目录中的java文件

    public static void getAllFile(File dir){
        //递归打印目录
        //不输出目录
        // System.out.println(dir);
        File[] files=dir.listFiles();
        for (File f:files) {
            if(f.isDirectory()){
                getAllFile(f);
            }
            else{
                //只要.java文件
                //使用endwith()
                //1.把file对象f转换为字符串对象【f.getName()】
                String name = f.getName();//获取文件名称
                String path = f.getPath();//比较全的文件路径【绝对路径】
                String s = f.toString();
                //如果是大写,转换为小写
                s.toLowerCase();//字符串转换为小写
                //2.调用String类中的方法endsWith()判断是否以.java结尾
                boolean b = s.endsWith(".pdf");
                //如果为真,则输出
                if (b) {
                    System.out.println(f);
                }
                //用一行链式编程实现
                if(f.getName().toLowerCase().endsWith(".pdf")){
                    System.out.println("-------------------------------------------");
                }
            }
        }

2、文件过滤器优化 

  • listFiles():返回路径中的文件
  • listFiles(FileFilter filter) :返回满足过滤条件(实现类重写accept方法)的文件和目录
  • listFiles(FilenameFilter filter) :类的accept方法有两个参数(路径 +文件名)

3、FileNameFilter过滤器的使用和Lambda优化

public class Demo06FilterBianliFile2 {
    public static void main(String[] args) {
        File file=new File("E:\\Java");
        //打印多级目录
        getAllFile(file);
    }
    public static void getAllFile(File dir){
        //递归打印目录
        //传递一个过滤器对象
        File[] files=dir.listFiles((pathname)-> pathname.isDirectory()||pathname.getName().toLowerCase().endsWith(".pdf"));
        //使用Lambda表达式优化匿名内部类(函数式接口可以使用)
//        File[] files=dir.listFiles((d,name)-> new File(d,name)||name.getName().toLowerCase().endsWith(".pdf"));
        for (File f:files) {
            if(f.isDirectory()){
                getAllFile(f);
            }
            else{
                System.out.println(f);
            }
        }
    }
}

 

posted @ 2021-05-30 16:03  哥们要飞  阅读(46)  评论(0编辑  收藏  举报