一、概述
java.io.File类是文件和目录路径名称的抽象表示,主要用于文件和目录的创建、查找和删除等操作
二、File类的构造方法
- public File(String pathname):通过将给定的路径名 字符串转换为抽象类路径 来创建新的实例
- public File(String parent,String child):从父路径字符串 和 子路径字符串创建新的File实例
- public File(File parent,String child):从父抽象路径名 和 子路径名字符串创建新的File实例
注意事项:
1.一个FIle代表的是硬盘中的一个路径或者一个文件
2.无论该路径下是否存在文件或目录,都不影响File对象的创建
File file1 = new File("D:\\aaa\\a.txt");
File file2 = new File("D:\\aaa","a.txt");
File file3 = new File("a.txt");
System.out.println(file1);
System.out.println(file2);
System.out.println(file3);
System.out.println("=================================");
// 关键File类对象表示"D:\aaa\bbb"文件夹路径
File file4 = new File("D:\\aaa\\bbb");
File file5 = new File("D:\\aaa","bbb");
File file6 = new File("bb");
System.out.println(file4);
System.out.println(file5);
System.out.println(file6);
System.out.println("=================================");
File file7 = new File("D:\\aaa\\abcdefg");
System.out.println(file7);
输出结果:
D:\aaa\a.txt
D:\aaa\a.txt
a.txt
=================================
D:\aaa\bbb
D:\aaa\bbb
bb
=================================
D:\aaa\abcdefg
三、绝对路径 和 相对路径
1.绝对路径
从盘符开始的路径,这是一个完成的路径
2.相对路径
相对于项目目录的路径,这是一个边界的路径,开发中最常用的【掌握】
举个例子:
生活中:
生活中:你和女朋友在 XXX公司 上班
你告诉你女朋友你在哪里:
-绝对路径:X市X区X路XXX公司 X栋301
-相对路径: X栋301
程序中:
-绝对路径:D:\\myprojects\\javase0806\\MyTest\\src\\cn\\dkt\\utils
-相对路径:MyTest\\src\\cn\\dkt\\utils
File file1 = new File("D:\\myprojects\\javase0806\\MyTest\\src\\cn\\dkt\\utils");
// 相对路径
File file2 = new File("MyTest\\src\\cn\\dkt\\utils");
System.out.println(file1);
System.out.println(file2);
四、获取功能的方法
- public String getAbsolutePath():返回File的绝对路径名 字符串
- public String getPath():将此File转换为路径名 字符串,获取构造路径(就是获取你构造方法时候放入的路径)
- public String getName():返回此File表示的文件或目录的名称
- public long length():返回此File表示的文件的字节大小,不能获取目录的字节大小
方法演示:
(这里只是作为一个示范,请忽略我的项目路径😂,这项目纯属个人学习方便)
// 创建一个File对象,表示day12项目里的 resources\images\a.jpg
File file1 = new File("day12_File类与递归&IO流&字符流&字节流\\resouress\\a.jpg");
System.out.println("file1的绝对路径:" + file1.getAbsolutePath());
System.out.println("获取file1的构造路径:" + file1.getParent());
System.out.println("获取file1的文件名称:" + file1.getName());
输出结果:
file1的绝对路径:D:\myprojects\javase0806\day12_File类与递归&IO流&字符流&字节流\resouress\a.jpg
获取file1的构造路径:day12_File类与递归&IO流&字符流&字节流\resouress
获取file1的文件名称:a.jpg
五、判断功能的方法
- public boolean exists(): 此File标识的文件或目录是否实际存在
- public boolean isDirectory():此File标识的是否为文件夹
- public boolean isFile():此file表示的是否为文件
代码演示:
(大家进行练习的时候,尽量用一个自己真是存在的路径,演示效果会更佳)
// 创建一个真是的文件路径
File file1 = new File("day12_File类与递归&IO流&字符流&字节流\\resouress\\a.jpg");
System.out.println("file1表示的文件是否真实存在:" + file1.exists());
System.out.println("file1表示的文件是否是文件夹" + file1.isDirectory());
System.out.println("file1表示的文件是否是文件" + file1.isFile());
// 创建一个真实的文件夹路径
File file2 = new File("day12_File类与递归&IO流&字符流&字节流\\resouress");
System.out.println("file1表示的文件夹是否真实存在:" + file2.exists());
System.out.println("file1表示的文件夹是否是文件夹" + file2.isDirectory());
System.out.println("file1表示的文件夹是否是文件" + file2.isFile());
// 创建一个不真实的文件路径
File file3 = new File("day12_File类与递归&IO流&字符流&字节流\\resoures\\a.jpg");
System.out.println("file1表示的文件是否真实存在:" + file3.exists());
System.out.println("file1表示的文件是否是文件夹" + file3.isDirectory());
System.out.println("file1表示的文件是否是文件" + file3.isFile());
// 创建一个不真实的文件夹子路径
File file4 = new File("day12_File类与递归&IO流&字符流&字节流\\resoures\\a.jpg");
System.out.println("file1表示的文件夹是否真实存在:" + file4.exists());
System.out.println("file1表示的文件夹是否是文件夹" + file4.isDirectory());
System.out.println("file1表示的文件夹是否是文件" + file4.isFile());
输出结果:
file1表示的文件是否真实存在:true
file1表示的文件是否是文件夹false
file1表示的文件是否是文件true
file1表示的文件是否真实存在:true
file1表示的文件是否是文件夹true
file1表示的文件是否是文件false
file1表示的文件是否真实存在:false
file1表示的文件是否是文件夹false
file1表示的文件是否是文件false
file1表示的文件是否真实存在:false
file1表示的文件是否是文件夹false
file1表示的文件是否是文件false
六、创建和删除的方法
- public boolean creatNewFile():当 且仅当不存在该名称的文件时,创建一个新的空文件
- public boolean mkdir():创建由File表示的目录
- public boolean mkdirs():创建由File表示的目录,包括任何必须但不存在的父目录
- public boolean delete():删除由此File表示的文件或目录,只能删除文件或者空文件夹,不能删除非空文件夹
代码演示:
(在使用删除文件夹功能时,文件夹要为空)
// 创建文件
File file1 = new File("day12_File类与递归&IO流&字符流&字节流\\resouress\\a.txt");
System.out.println("是否创建成功:" + file1.createNewFile());
File file2 = new File("day12_File类与递归&IO流&字符流&字节流\\resouress\\aaa");
System.out.println("是否创建成功:" + file2.createNewFile()); // 创建了一个无法标识的文件
// 创建文件夹
File file3 = new File("day12_File类与递归&IO流&字符流&字节流\\resouress\\b");
System.out.println("使用mkdir创建文件夹:" + file3.mkdir());
// 创建多级目录
File file5 = new File("day12_File类与递归&IO流&字符流&字节流\\resouress\\a\\b\\c");
System.out.println("使用mkdires创建多级目录:" + file5.mkdirs());
// 删除一个文件
File file6 = new File("day12_File类与递归&IO流&字符流&字节流\\resouress\\a.txt");
System.out.println("文件是否删除成功:" + file6.createNewFile());
// 删除空文件夹
File file7 = new File("day12_File类与递归&IO流&字符流&字节流\\resouress\\b");
System.out.println("空文件夹是否删除成功:" + file7.delete());
// 删除非空文件夹
File file8 = new File("day12_File类与递归&IO流&字符流&字节流\\resouress\\a");
System.out.println("非空文件夹是否删除成功:" + file8.delete());
输出结果:
是否创建成功:false
是否创建成功:false
使用mkdir创建文件夹:true
使用mkdires创建多级目录:false
文件是否删除成功:false
空文件夹是否删除成功:true
非空文件夹是否删除成功:false
七、遍历目录的方法
- public String[] list():返回一个String数组,表示该File目录中的所有子文件或目录的名称
- public File[] listFiles():返回一个File数组,表示File目录中的所有子文件或目录的路径
代码演示:
(调用listFiles ()方法的File对象,表示的必须是实际存在的目录,否则返回null,无法进行遍历)
(这里的代码也仅仅时演示以下,毕竟每个人的文件路径都不一样,自己练习的时候,以自己的路径为准)
(😂忽略这个不正规的起名方式,我这是为了方便自己学习记笔记,平时写项目不会这样)
// 创建File对象,表示文件夹路径
File file1 = new File("day12_File类与递归&IO流&字符流&字节流\\resouress");
// 获取file1路径下的所有子文件和子文件夹的名称
String[] list1 = file1.list();
for (String s : list1) {
System.out.println(s);
}
// 获取file1路径下的所有子文件和子文件夹的路径
File[] list2 = file1.listFiles();
for (File file : list2) {
System.out.println(file);
}
// 访问缓存文件夹,或者如果该文件限制了访问权限
File file3 = new File("d:\\System Volume Information");
String[] list3 = file3.list();
File[] files = file3.listFiles();
System.out.println(list3+","+files);
if(list3 != null){
for (String s : list3) {
System.out.println(s); // 直接对没有访问权限的文件夹遍历的话会 NullPointerException异常
}
}
// 同理,如果文件夹路径不存在,返回值也是null,但是遍历同样会报错:空指针异常
File file4 = new File("d:\\aaabbb");
String[] list4 = file4.list();
File[] files4 = file4.listFiles();
System.out.println(list4 + "," + files4); // null, null
输出结果:
a
a.jpg
a.txt
aaa
day12_File类与递归&IO流&字符流&字节流\resouress\a
day12_File类与递归&IO流&字符流&字节流\resouress\a.jpg
day12_File类与递归&IO流&字符流&字节流\resouress\a.txt
day12_File类与递归&IO流&字符流&字节流\resouress\aaa
null,null
null,null