以下均为个人理解
如有不对请在评论区指正QAQ黑马程序员Java零基础视频教程_下部
定义
路径:1.相对路径:"a.txt" "abc.\\a.txt"
2.绝对路径:"c:\\a.txt" "c:\\abc\\a.txt"
构造方法
为什么要创造file对象
为了调用file中的方法
1.File (String pathname)
2.File (String parent,String child)
其为父路径 其为子路径
什么是父路径和子路径?
此方法为将父路径和子路径进行拼接
3.File (File parent,String child)
将一个file表示的路径和String表示的路径进行拼接
总结
成员方法
判断
isdirectory isfile exists
1.对一个文件的路径进行判断
a.txt是文件
输出 false true true
2.对一个文件夹的路径进行判断
其中bbb是文件夹
输出 true false true
3.对一个不存在的路径进行判断
c.txt不存在
返回 false false false
获取
length getabsolutepath getpath getname lastmodified
1.length(返回文件的大小 字节数量)
aaa.txt是文件
bbb是文件夹
但输出结果是 0
为什么
细节:1. length方法只能获取文件的大小 单位是字节
如果单位是M或G的话 可以不断的除以1024
len/1024 -> KB
1024/1024 ->MB
2.这个方法无法获取文件夹的大小
如果想要获取一个文件夹的大小 该怎么办
需要把这个文件夹中的所有文件大小都累加在一起
2.getAbsolutePath(获取文件的绝对路径)
3.getPath(返回定义文件时使用的路径)
创建对象时括号里写的是什么 返回的就是什么
4.getName(获取名字)
文件:返回文件名和文件后缀
文件夹:返回文件夹名
5.lastModified(返回文件的最后修改时间 时间毫秒值)
创建
createnewfile mkdir mkdirs
1.creatNewFile(创建一个新的空的文件)
出现编译时错误 直接alt+回车
选择第一个将异常进行抛出
运行后
变为
如果aaa文件夹中,c.txt文件已经存在 那么再运行会怎么样
结果是返回false 表示此时创建失败
如果所创建文件的父级路径不存在 那么方法报错
如果在aaa中创建ddd文件夹
返回true 创建成功
创建了一个没有后缀的文件
注意创建的一定是文件
2.mkdir(创建单极文件夹(目录))
为什么是false
虽然不存在名称为ddd的文件夹
但存在与其路径相同的文件 路径一定是唯一的
输出false
只能创建单级不能创建多级
细节
3.madirs(创建多级文件夹)
这个用的多 因为此方法也可以创建单极文件夹
在aaa大类中创建aaa文件夹 在aaa文件夹中创建bbb文件夹 在bbb中创建ccc
删除
delete
注意:只能删除空文件夹
删除文件
删除的文件不会进入回收站
删除文件夹
如果文件夹里没有东西 那么直接delete就可以删除成功 不会进入回收站
如果文件夹中有东西 那么返回false 删除失败 只能将文件夹里的东西全部删除后再删除文件本身
获取并遍历
listfiles
1.listFiles(获取当前该路径下所有内容) 最重要
输出
细节
只需要掌握listFiles的空参构造就可以了
listroots(获取系统中所有的盘符) list listfiles
1.listroots 获取系统中所有的盘符
输出
2.list() 获取当前该路径下所有内容( 仅仅能获得名字)
输出
3.list(FilenameFilter filter)利用文件名过滤器获取当前路径下所有内容
此为函数式接口 可以写成匿名内部和lambda表达式
listFiles版
4.listfiles (FileFilter filter) 利用文件名过滤器获取当前路径下所有内容 返回值是file类型
5.listfiles (FilenameFilter filter) 利用文件名过滤器获取当前路径下所有内容
这里的File dir String name合起来就是上面的File pathname
如何实现上面的需求:
综合练习
练习1
运行后
成功创建aaa
练习2
其中bbb文件夹中有以avi结尾的电影
定义一个判断结尾是否是.avi的方法
回到测试类中
返回值为false
返回true
练习3
不能用上述方法的原因 : 每个文件夹包含的东西不统一
解题思路:
把四个文件夹拆开 将a文件夹拆成许多小文件夹
所以使用递归
但是运行结果会报错
第28行为空指针异常,意味着以下两个变量其中有一个有可能为空
File file 表示src中的每一个文件或者文件夹 不可能为空
所以是后面的files数组可能为空
为什么
因为listFiles方法的细节
如果里面的文件夹是需要有权限才可以进入的,那么此方法的返回值为null
所以要对files做一个非空判断
这样就搞定c盘了 那其他盘怎么办
再定义一个对本地所有盘符进行遍历的方法就好了
在测试类中直接调用空参的findAVI方法
练习4
如果我们要删除一个有内容的文件夹
1.先删除文件夹里所有的内容
2.再删除文件夹本身
不知道文件夹里的文件夹有多少级怎么办呢
和练习三一样
还是使用递归的思想
目的是删除src文件夹
过程:
先进入循环删除src中的 a.txt 和 b.txt 因为aaa是文件夹所以再次调用delete方法
删除aaa文件夹中的 aa.txt 因为有空文件夹所以再次调用delete方法
空文件夹.listFiles返回的是一个长度为0的数组 此数组不能遍历,循环体进不去,所以删除空文件夹
练习5
定义一个可以统计文件夹总大小的方法
练习6
定义方法
因为不确定有几个后缀名,所以用map进行统计
注意后面将返回值改成了hashmap
在循环外返回hm