Java-File类、递归-第19节

学习目标:

  • 熟练使用File类,能够实现创建与删除文件文件夹操作;
  • 掌握常用的搜索文件夹或者文件的方法;
  • 理解递归的概念,并熟练使用递归完成搜索工作。

学习内容:

一、File类
1、简介
  • java.io.File
  • 对文件或文件夹(目录)的封装类
2、主要功能
  • 创建文件、文件夹
  • 删除文件、文件夹
  • 查找文件、文件夹
  • 判断是否存在文件、文件夹
  • 遍历文件夹(目录)
  • 获取文件的大小
3、静态成员变量
  • pathSeparator
    • Static String pathSeparator;
    • 路径分隔符,window-; linux-:
  • pathSeparatorChar
    • Static Char pathSeparatorChar;
    • 转换成字符的路径分隔符
  • fileSeparator
    • Static String fileSeparator;
    • 文件夹名称分隔符,window-\ linux-/
  • PS:
    • 程序中的路径不能写死---->
      “c:”+File.fileSeparator+“File”+File.fileSeparator+“name”
4、路径
  • 路径不区分大小写
  • windows中路径的文件名称用反斜杠分割,反斜杠是转义字符,两个反斜杠表示一个普通的反斜杠
5、构造方法
  • File(String pathString); # 创建对应字符串路径的文件对象
  • File(String parent, String child); # 将字符串路径分为父与子两部分进行拼接
  • File(File parent, String child); # 将字符串路径分为父类文件对象与子类字符串进行拼接
6、成员方法
  • 获取类功能
    • public String getAbsolutePath(); # 获取绝对路径
    • public String getPath(); # 获取File对象传递的路径
    • public String getName(); # 获取文件或文件夹的名字
    • public Long length(); # 获取文件的大小(kb)
      注意:文件夹与不存在的路径的大小都是0
  • 判断类功能
    • public boolean exists(); # 判断路径是否存在
    • public boolean isDirectory(); # 判断是不是文件夹
    • public boolean isFile(); # 判断是不是文件
      注意:
      如果路径不存在,下面的两个判断都是false
  • 创建删除功能
    • public boolean createNewFile(); # 创建文件,如果存在不创建,返回false
      如果创建文件的路径不存在,抛出异常
    • public boolean mkdir(); # 创建目录,单级目录
    • public boolean mkdirs(); # 创建目录,单级或多级目录
    • public boolean delete(); # 删除文件或文件夹,文件夹有内容不会删除,而且是不经过
      回收站的直接删除
  • 遍历功能
    • public String[] list(); # 遍历目录下的所有文件与文件夹,并转换成字符串数组
    • public File[] listFiles(); # 遍历目录下的所有文件与文件夹,并转换成File对象数组
    • 注意:
      • 当目录不存在或者是一个文件时,会报空指针异常
      • 两种方法都可以显示隐藏起来的文件与文件夹
二、递归
1、简介
  • 概念
    自己调用自己
  • 分类
    • 直接递归:自己调用自己
    • 间接递归:A调用B,B调用C,C调用A
  • 注意事项
    • 递归一定要有条件限制,保证其能够停下来,防止发生栈内存溢出;
      在这里插入图片描述

    • 递归的次数不能太多,否则也会发生栈内存溢出;

    • 构造方法,禁止递归。

  • 使用前提
    • 调用方法时,主体不变,参数变化

学习产出:

1、File 静态成员变量

package mypackage.day15.demo01;

import java.io.File;

public class FileStaticVar {
    public static void main(String[] args) {
        System.out.println(File.separator);
        System.out.println(File.separatorChar);
        System.out.println(File.pathSeparator);
        System.out.println(File.pathSeparatorChar);
        System.out.println("C:"+File.separator+"a.txt");
    }
}


2、File构造方法

package mypackage.day15.demo01;

import java.io.File;

public class FileConstruct {
    public static void main(String[] args) {
        construct1();
        construct2();
        construct3();
    }

    private static void construct3() {
        File subfile = new File("D:\\Aplication\\WeChat\\StoreFile");
        File file = new File(subfile, "WeChat Files\\wxid_nqv5pfqxwpdh21\\FileStorage\\File\\2020-10");
        System.out.println(file);
    }

    private static void construct2() {
        File file = new File("D:\\Aplication\\WeChat\\StoreFile",
                "WeChat Files\\wxid_nqv5pfqxwpdh21\\FileStorage\\File\\2020-10");
        System.out.println(file);
    }

    private static void construct1() {
        File file = new File("D:\\Aplication\\WeChat\\StoreFile" +
                "\\WeChat Files\\wxid_nqv5pfqxwpdh21\\FileStorage\\File\\2020-10");
        System.out.println(file);

    }
}

3、 File成员方法

package mypackage.day15.demo02;

import java.io.File;
import java.io.IOException;

public class FileMemberMethod {
    public static void main(String[] args) throws IOException {
        File file = new File("D:\\Aplication\\WeChat\\StoreFile");
        System.out.println("====get====");
        mem1(file);
        System.out.println("====judge====");
        mem2(file);
        System.out.println("====create and delete====");
        mem3(file);
        System.out.println("====look====");
        mem4();
    }

    private static void mem4() {
        File file = new File("D:\\Aplication\\WeChat\\StoreFile\\WeChat Files\\All Users");
        String[] list = file.list();
        for (String s : list) {
            System.out.println(s);
        }
        File[] files = file.listFiles();
        for (File file1 : files) {
            System.out.println(file1);
        }
    }

    private static void mem3(File file) throws IOException {
        File file1 = new File(file, "\\test\\abc");
        System.out.println(file1.mkdirs());
        System.out.println(file1.mkdir());
        System.out.println(file1.createNewFile());
        System.out.println(file1.delete());
    }

    private static void mem2(File file) {
        System.out.println(file.exists());
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());
    }

    private static void mem1(File file) {
        System.out.println(file.getAbsolutePath());
        System.out.println(file.getAbsoluteFile());
        System.out.println(file.getPath());
        System.out.println(file.getName());
        System.out.println(file.length());
    }
}

4、练习:使用递归计算1-n之间的和
在这里插入图片描述

package mypackage.day15.demo03;

import java.io.File;
import java.io.IOException;

public class RecursionExecise1 {
    public static void main(String[] args) {
        int sum = sum(100);
        System.out.println(sum);
    }

    private static int sum(int i) {
        if (i==1){
            return 1;
        }
        return i+sum(i-1);
    }
}

5、练习:使用递归计算n的阶乘

package mypackage.day15.demo03;

public class RecursionExecise2 {
    public static void main(String[] args) {
        int jiecheng = jc(5);
        System.out.println(jiecheng);
    }

    private static int jc(int i) {
        if (i==1){
            return 1;
        }
        return i*jc(i-1);
    }
}

6、练习:递归打印多级目录
在这里插入图片描述

package mypackage.day15.demo03;

import java.io.File;



public class RecursionExecise3 {
    public static void main(String[] args) {
        File file = new File("D:\\Aplication\\WeChat\\StoreFile\\WeChat Files\\All Users");
        getFilesName(file);
    }

    private static void getFilesName(File file) {
        System.out.println(file);
        if (file.isDirectory()){
            File[] files = file.listFiles();
            for (File file1 : files) {
                if (file1.isDirectory()){
                    getFilesName(file1);
                }else {
                    System.out.println(file1);
                }
            }
        }
    }
}

7、练习:文件搜索

package mypackage.day15.demo03;

import java.io.File;


public class RecursionExecise4 {
    public static void main(String[] args) {
        File file = new File("D:\\Aplication\\WeChat\\StoreFile\\WeChat Files\\All Users");
        findFilesName(file);
    }

    private static void findFilesName(File file) {
        if (file.isDirectory()){
            File[] files = file.listFiles();
            for (File file1 : files) {
                if (file1.isDirectory()){
                    findFilesName(file1);
                }else {
                    if (file1.toString().endsWith(".jpg")){
                        System.out.println(file1);
                    }
                }
            }
        }
    }
}

8、过滤器的使用
在这里插入图片描述

package mypackage.day15.demo03;

import java.io.File;
import java.io.FileFilter;


public class RecursionExecise5 {
    public static void main(String[] args) {
        File file = new File("D:\\Aplication\\WeChat\\StoreFile\\WeChat Files\\All Users");
        findFilesName(file);
    }

    private static void findFilesName(File file) {
        File[] files1 = file.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                if (pathname.isDirectory()){
                    findFilesName(pathname);
                    return false;
                }else {
                    if (pathname.toString().endsWith(".jpg")){
                        return true;
                    }
                    return false;
                }
            }
        });
        for (File file1 : files1) {
            System.out.println(file1);
        }
    }
}

9、练习:用过滤器进行文件搜索

package mypackage.day15.demo03;

import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;


public class RecursionExecise6 {
    public static void main(String[] args) {
        File file = new File("D:\\Aplication\\WeChat\\StoreFile\\WeChat Files\\All Users");
        findFilesName(file);
    }

    private static void findFilesName(File file) {
//        File[] files1 = file.listFiles(new FilenameFilter() {
//            @Override
//            public boolean accept(File dir, String name) {
//                File pathname = new File(dir, name);
//                if (pathname.isDirectory()){
//                    findFilesName(pathname);
//                    return false;
//                }else {
//                    if (pathname.toString().endsWith(".jpg")){
//                        return true;
//                    }
//                    return false;
//                }
//            }
//        });
        File[] files1 = file.listFiles((dir, name)->{
                return dir.toString().endsWith(".jpg") || name.endsWith(".jpg");
            }
        );
        for (File file1 : files1) {
            System.out.println(file1);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值