JDK(java官方)内置对象-高级-File
1.为什么要学习File
讲解IO流之前为什么先讲解异常和File类呢?
因为File表示的是IO流将来要操作的文件,所以我们需要学习File类。
而操作文件无非就是上传文件和下载文件,在这个操作的过程中可能出现问题,出现问题后,我们需要对对应的代码进行处理。所以我们需要学习异常。
2.File简介
2.1.File的概念
文件和目录路径名的抽象表示形式
2.2.File常见成员
2.2.1.构造方法
publicFile(String pathname)
publicFile(String parent,String child)
publicFile(File parent,String child)
通过创建对象后,我们再来理解文件和目录路径名的抽象表示形式这句话的意思:
仅仅是一个路径的表示,不代码具体的事物一定是存在的。
代码实战:
2.2.2.常见方法
2.2.2.1.创建功能
public boolean createNewFile() 创建文件如果存在这样的文件,就不创建了
public boolean mkdir() 创建文件夹如果存在这样的文件夹,就不创建了
public boolean mkdirs() 创建文件夹,如果父文件夹不存在,会帮你创建出来,如果存在就不创建了
2.2.2.1.1. mkdir()
代码实战:
publicclass Demo1 {
【思考】:既然返回值是boolean,那么本地磁盘上已经存在了这个文件夹,到底返回true还是false呢?
2.2.2.1.2. createNewFile()
代码实战:
【思考】:为何会报错呢?
观察源码
【思考】:这个方法如果再执行一次,效果会怎么样呢?
返回false
【思考题】:请在d盘的test目录下创建一个b.txt文件
【思考题】:我想要在d盘的aaa文件夹下创建一个bbb文件夹,怎么做呢?
代码实战:
【接着思考】:为何不会抛出异常呢?
【正确做法】:
【接着思考】:如果有很多层级结构的文件夹,这样子操作显然是非常不合适的
这时候,我们就迫切需要一个方法帮我们去处理这种情况,可以使用:Mkdirs()
【开发总结】:
- 你到底要创建文件还是文件夹,你最清楚,方法不要调错了。
- 如果想要创建一个子文件/文件夹,前提必须要保证该文件对应的文件目录首先要存在
【注意点】:如果你在创建文件的时候,你没有写任何目录路径,那么会怎么样呢?
代码实战:
创建出来的文件存在于: E:\yueqian讲课\01-java基础\0830\备课代码\02-File\女神.jpg
你当前项目所在的目录下[U1] !!!!
2.2.2.2.删除功能
public boolean delete()
2.2.2.2.1.删除单个文件
如果删除的是本地硬盘中文件,那么会直接删除并且不走回收站!
File file = new File("d:\\a.txt"); System.out.println(file.delete()); |
---|
如果删除的是本地项目中文件,删除完后,需要手动刷新一下
2.2.2.2.2.删除文件夹
删除bbb文件夹
// 删除bbb文件夹 File file11 = new File("e:\\aaa\\bbb"); booleanb = file11.delete(); System.out.println(b); |
---|
注意:在java中删除操作,不走回收站,所以请一定要注意!!!
删除aaa文件夹
File file= new File("d:\\aa\\bb"); file.delete();[n2] File fle = new File("d:\\aa");[n3] fle.delete(); |
---|
因为aaa中有文件夹bbb,如果想要删除aaa文件夹,必须先删除bbb文件夹
下面代码为何会出错呢?因为这样子写,是代表在项目的根目录下删除[n4]
2.2.2.3.重命名功能
public boolean renameTo(File file)[n5]
代码实战:
磁盘上
File file = new File("D:\\校服美女.jpg"); File file2 = new File("D:\\女神.jpg"); System.out.println(file.renameTo(file2)); |
---|
当前项目下
【思考】:如果在进行重命名操作的时候,路径不一致会怎么样呢?
代码实战:
其实是做了一个剪切操作[n6]
【开发小结】:
如果路径一致,那么仅仅就是改个名字。
如果路径不一致,那么不仅仅是改个名字,还会剪切。
2.2.2.4.判断功能
public booleanisDirectory() 判断是否是目录
public boolean isFile() 判断是否是文件
public booleanexists() 判断是否存在
public boolean canRead() 判断是否可读
public boolean canWrite() 判断是否可写
public boolean isHidden() 判断是否隐藏
文件的状态介绍
- 隐藏
- 可读
- 可写
- 可读可写
Windows 系统设置文件的状态
代码实战:
思考:File文件对象具体有哪些使用场景呢?
.2.2.5.获取功能
2.2.2.5.1.基本获取功能
• public String getAbsolutePath() 获取绝对路径[n7]
• public String getPath() 获取相对路径[n8]
思考:以后开发中,会使用哪种路径方式?
• public String getName() 获取名称
• public long length() 获取长度(字节长度)
容量的单位从小到大依次是:字节(B)、KB、MB、GB、TB。它们之间的关系是。
1TB=1024GB
1GB=1024MB
1MB=1024KB
1KB=1024字节
代码实战:
• public long lastModified() (获取最后一次修改时间)
System.out.println("最后修改时间:"+file.lastModified()); |
---|
观察打印:
最后修改时间:1550292558058
思考:为何是这样子呢?[n9]
将毫秒数进行转换
Date date =new Date(file.lastModified()); SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateStr = sd.format(date); System.out.println("dateStr:"+dateStr); |
---|
观察打印结果:
2.2.2.5.2.高级获取功能
public String[] list() 获取指定目录下的所有文件或者文件夹的名称数组
获取当前项目下的所有
思考:如何获取当前盘符下的所有呢?
public File[] listFiles() 获取指定目录下的所有文件或者文件夹的File数组
观察打印效果:
思考:如何我想像上面一样,仅仅是获取到文件名称呢?[n10]
思考:以后开发中,我们到底应该使用哪一种方式比较好呢?[n11]
3.File作业练习题
【练习题】:
判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称,如果没有,给出提示!!
批量修改多个文件名称
[U1]在项目上右键刷新即可
或者去项目的目录下找
[n2]先删除bb
[n3]先删除aa
[n4]因为不加任何路径,默认就是删除当前项目目录下的东西
[n5]思考为何重命名方法的参数是File 类型?
[n6]刷新一下
[n7]获取的是完整路径名,从盘符开始
[n8]相对来获取的,参照物是盘符
[n9]是以毫秒数进行计算的
[n10]思路1:截取字符串
思路2:使用File.getName()方法
[n11]第二种方式比较好,因为返回的是File对象,有对象,就可以使用对象操作一些方法获取更多的信息