File类--java进阶day12
1.File类
File类为文件或文件夹对象
2.File类的使用
要想使用File类,就需要创建对象,常用的构造方法如下
1.根据文件路径字符串创建对象
2.父类路径和子类路径字符串一起创建对象
就是一个路径被分成两半进行创建
3.父类文件对象路径和子类字符串路径一起创建对象
和第二种差别不大,就是前面的父路径从字符串改为了File对象
2.细节
1.File既可以用来关联文件,也可以关联文件夹
2.传入File的文件(夹)路径,可以是存在的,也可以是不存在的,因为我们会有方法来创建不存在的文件(夹)
3.相对路径和绝对路径
1.绝对路径
路径写的十分完整,通常是存在磁盘中
2.相对路径
路径写的不够完整,创建的文件对象是针对于当前java项目的,存在java项目中
如果想在java程序的某个包下创建文件对象,只需右键copy该包的绝对路径
然后把绝对路径复制到File类的构造方法中
因为我们创建的这个文件是相对于当前包,所以可以省略掉它的磁盘位置,直接从src写起
4.File常用方法
[1]判断相关
如图,根据我们创建的File对象进行判断,exists判断对应的File对象是否存在
[2]获取相关
1.length()
调用该方法可以返回文件的字节数量
该方法返回的文件字节数量是正确的,返回文件夹的字节数量是错误的,这是该api的bug
2.getAbsolutePath()
返回文件的绝对路径(最全的路径)
我们写的是相对路径,返回的是文件对于该项目的绝对路径
3.getName()
返回文件的名称
4.lastModified()
返回文件上一次修改的时间的毫秒值,直接打印出来的毫秒值太大,很难获取信息,所以我们搭配Date的构造方法使用
..
案例
...
5.File类的创建方法
[1]createNewFile()
创建一个新的空文件
如下图,红色框中标记,返回值是判断是否创建成功,如果已存在则返回false
[2]mkdirs()
创建一个空的文件夹,并且能在该文件夹中继续创建文件夹
如下图,黄色框标记,返回值判断是否创建成功,若已存在返回false
创建的文件夹名称可以随意命名,即使使用文件名称给文件夹命名也可以
6.File类的删除方法
调用该方法可以删除文件和文件夹
注意
上图,我们想直接删除aaa会返回false,因为aaa中还存在bbb,delete只能删除空文件夹
7.File类的遍历方法
使用listFiles(),可以获取到所有的一级文件对象,并且将获取到的对象全部装入数组中
"一级文件对象"就是指在进入我们指定的路径后第一次碰见的文件和文件夹
如下图,aaa和1.txt、2.txt都是第一次就遇见的文件夹和文件,三者都可以获取。即使aaa里面还有文件或者文件夹,由于不是第一次碰见,也就无法获取到
注意
我们电脑中会带有一些要有权限才能访问的文件夹,此时调用listFiles就会返回null,可能导致空指针异常,所以我们在使用listFiles时都要进行非空判断
案例
endWith:判断某个字符串末尾是否与括号里的字符串匹配
第三步,当判断file是文件时,再判断是否符合名称后缀为.java
执行else,说明file此时只能是文件夹,之前说过电脑里会带有一些权限文件夹,所以我们可以在这时进行非空判断
普通文件夹也可能包含权限文件夹,所以还要调用listFiles获取到所有文件和文件夹,若不为null则调用递归
递归:此时file是文件夹,放入我们自己写的方法中,又会重复上述步骤,获取该文件夹的每一个文件和文件夹,继续打印文件、判断文件夹
另一种非空判断写法
在最开始就进行非空判断,只有不是null才可以进行操作
这里不能使用else,因为还有可能存在是文件,但后缀名不是.java的文件
案例
之前我们说过,delete方法只能删除空的文件夹,如果带有文件的文件夹则无法删除,所以,我们要先将文件夹里的文件删除掉
如果拿到的是文件夹,我们就要进入到该文件夹,然后继续重复上述步骤
写到这里,其实还没结束,我们调用方法,会发现文件全都删掉了,但是文件夹还存在
..
..