Java进阶—File类、递归、过滤器

一、java.io.File类:文件和目录路径名的抽象表示形式

java把电脑中的文件和文件夹(目录)封装成为了一个File类,我们可以使用File类对文件和文件夹进行操作

我们可以使用File类的方法:
    创建一个文件/文件夹
    删除一个文件/文件夹
    获取文件/文件夹
    判断文件/文件夹是否存在
    对文件夹进行遍历
    获取文件的大小
    
File类是一个与系统无关的类,任何的操作系统都可以使用这个类中的方法

重点:
    file:文件
    directory:文件夹(目录)
    path:路径

二、路径

路径:

绝对路径:是一个完整的路径。是以盘符开始的路径
相对路径:是一个简化的路径。相对指的是相对于当前项目的根目录,如果使用当前项目的根目录,路径可以简化书写(可以省略项目的根目录)

注意事项:
    1.路径不区分大小写
    2.路径中的文件名称分隔符Windows使用反斜杠(\),反斜杠是转义字符,两个反斜杠代表一个普通的反斜杠

三、File类的构造方法

1.File(String pathname)

File(String pathname):通过将给定路径名字符串转换为抽象路径来创建一个新File实例。
    参数:
        String pathname:字符串的路径名称
        路径可以是以文件结尾,也可以是以文件夹结尾
        路径可以是相对路径,也可以是绝对路径
        路径可以是存在的,也可以是不存在的
        创建File对象,只是把字符串路径封装为File对象,不考虑路径的真假情况

2.File(String parent, String child)

File(String parent, String child) 根据parent路径名字符串和child路径名字符串创建一个新File实例
    参数:把路径分成了两部分
        String parent:父路径
        String child:子路径
    好处:
        父路径和子路径,可以单独书写,使用起来非常灵活,父路径和子路径都可以变化

3.File(File parent, String child)

File(File parent, String child) 根据parent抽象路径名和child路径名字符串创建一个新File实例。
    参数:把路径分成了两个部分
        File parent:父路径
        String child:子路径
    好处:
        父路径和子路径,可以单独书写,使用起来非常灵活,父路径和子路径都可以变化
        父路径是File类型,可以使用File类的方法对路径进行一些操作,再使用路径创建对象

四、File类获取功能的方法

1.public String getAbsolutePath()

返回此File的绝对路径名字符串
获取的就是构造方法中传递的路径
无论路径是绝对的还是相对的,getAbsolutePath方法返回的都是绝对路径

2.public String getPath()

将此File转换为路径名字符串
获取的就是构造方法中传递的路径

toString方法实际上调用的就是getPath方法
源码:
    public String toString() {
        return getPath();
    }

3.public String getName()

返回由此File表示的文件或目录的名称
获取的就是构造方法传递路径的结尾部分(文件/文件夹)

4.public long length()

返回由此File表示的文件的长度
获取的是构造方法指向的文件的大小,以字节为单位
注意:
    1.文件夹是没有大小概念的,所以不能获取文件夹的大小
    2.如果构造方法中给出的路径不存在,那么length方法返回0

五、File判断功能的方法

1.public boolean exists()

此File表示的文件或目录是否实际存在
用于判断构造方法中的路径是否存在
    存在:true
    不存在:false

2.public boolean isDirectory()

此File表示的是否为目录
    用于判断构造方法中给定的路径是否以文件夹结尾
public boolean isFile():此File表示的是否为文件
    用于判断构造方法中给定的路径是否以文件结尾

注意:
    电脑的硬盘中只有文件/文件夹,两个方法是互斥的
    这两个方法的使用前提:路径必须是存在的,否则都返回false

3.public boolean isFile()

此File表示的是否为文件

六、File类创建删除功能的方法

1.public boolean createNewFile()

当且仅当具有该名称的文件尚不存在时,创建一个新的空文件

创建文件的路径和名称在构造方法中给出(即构造方法的参数)
返回值:布尔值
    true:文件不存在,创建文件,返回true
    false:文件存在,不会创建,返回false
注意:
    1.此方法只能创建文件,不能创建文件夹
    2.创建文件的路径必须存在,否则会抛出异常

public boolean createNewFile() throws IOException
    createNewFile方法声明抛出了IOException,我们调用这个方法,就必须处理这个异常,要么throws,要么try...catch

2.mkdir() VS mkdirs()

public boolean mkdir():创建单级文件夹

public boolean mkdirs():既可以创建单级文件夹,也可以创建多级文件夹

创建文件夹的路径和名称在构造方法中给出(即构造方法的参数)
返回值:布尔值
    true:文件夹不存在,创建文件夹,返回true
    false:文件夹存在,不会创建,返回false;构造方法中给出的路径不存在返回false
注意:
    此方法只能创建文件夹,不能创建文件

3.public boolean delete()

删除由此File表示的文件或目录

此方法,可以删除构造方法路径中给出的文件/文件夹
返回值:布尔值
    true:文件/文件夹删除成功,返回true
    false:文件夹中有内容,不会删除,返回false;构造方法中给出的路径不存在返回false
注意:
    delete方法是【直接在硬盘】删除文件/文件夹,不走回收站,删除要谨慎

七、File类遍历(文件夹)目录功能

1.public String[] list()

返回一个String数组,表示该File目录中的所有子文件或目录

遍历构造方法中给出的目录,获取目录中所有文件或文件夹的名称,把获取到的多个名称存储到一个String类型的数组中

2.public File[] listFiles()

返回一个File数组,表示该File目录中的所有子文件或目录

遍历构造方法中给出的目录,会获取目录中所有的文件/文件夹,把文件/文件夹封装为File对象,多个File对象存储到File数组中

3.注意事项

list方法和listFiles方法遍历的是构造方法中给出的[目录]

如果构造方法中给出的[路径不存在],会抛出空指针异常

如果构造方法中给出的路径[不是一个目录],也会抛出空指针异常

八、递归

递归概念

方法自己调用自己

递归的分类

递归分为两种:直接递归和间接递归:

    -直接递归称为方法自身调用自己。
    
    -间接递归可以分为A方法调用B方法,B方法调用C方法,C方法调用A方法。

注意事项

-递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出

-在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出

-构造方法,禁止递归

-递归的使用前提:
    -当调用方法的时候,方法的主体不变,每次调用方法的参数不同,可以使用递归

九、过滤器

1.问题

如果遍历完一个文件夹中的文件以后,只想要以.java结尾的文件,则可以通过过滤器实现。

2.分类

在File类中有两个和ListFiles重载的方法,方法的参数传递的就是过滤器

2.1 file[] listFiles(FileFilter filter)

java.io.FileFilter接口:用于抽象路径名(File对象)的过滤器。

    作用:用来过滤文件(File对象)
    抽象方法;用来过滤文件的方法
        boolean accept(File pathname) 测试指定抽象路径名是否应该包含在某个路径名列表中
        参数:
            File  pathname:使用ListFiles方法遍历目录,得到的每一个文件对象

2.2 file[] listFiles(filenameFilter filter)

java.io.FilenameFilter接口:实现此接口的类实例可用于过滤器文件名
    作用:用于过滤文件名称
    抽象方法:用来过滤文件的方法
        boolean accept(File dir, String name) 测试指定文件是否应该包含在某一文件列表中
        参数:
            File dir:构造方法中传递的被遍历的目录
            String name:使用listFiles方法遍历目录,获取的每一个文件/文件夹的名称

注意事项:
    两个过滤器接口是没有实现类的,需要我们自己写实现类,重写过滤的方法accept,在方法中自己定义过滤的规则

3.代码分析

File[] files = dir.listFiles((d, name) -> new File(d, name).isDirectory() || name.toLowerCase().endsWith(".java"));

listFiles方法一共做了3件事:

1.listFiles方法会对构造方法中传递的目录进行遍历,获取目录中的每一个文件/文件夹-->封装为File对象
2.listFiles方法会调用参数传递的过滤器中的方法accept
3.listFiles方法会把遍历得到的每一个File对象,传递给accept方法的参数pathname

accept方法返回值是一个布尔值:

true:就会把传递过去的File对象【保存到File数组】中
false:不会把传递过去的File对象保存到File数组中

过滤的规则:
    在accept方法中,判断File对象是否以.java结尾
    是就返回true,不是返回false
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值