JavaEE学习日志持续更新----> 必看!JavaEE学习路线(文章总汇)
File类
java.io.File类
文件和目录路径名的抽象表示。
概述
File类把计算机中的文件和文件夹封装为File对象,使用File对象中的方法就可以操作文件和文件夹:
可以使用File类的方法,创建一个文件或文件夹
可以使用File类的方法,删除一个文件或文件夹
可以使用File类的方法,获取一个文件或文件夹的路径
可以使用File类的方法,遍历文件夹
需要掌握三个基本单词:
path:路径
file:文件
directory:文件夹(目录)
路径
路径分为绝对路径和相对路径
绝对路径:以盘符开始的路径,如: c:\1.jpg
相对路径:相对于我们的项目根目录而言,使用项目根目录作为路径,可以省略书写。
例如:需要在项目的根目录创建一个1.txt文件,则可以使用相对路径进行创建。
项目的根目录:D:\Program Files\IDEA Projects\EmploymentClass
相对路径:1.txt
绝对路径:D:\Program Files\IDEA Projects\EmploymentClass\1.txt
简单记:没有写盘符的,都是相对路径
注意:路径不区分大小写
构造方法
File类的构造方法
File(String pathname)
通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。File(String parent, String child)
从父路径名字符串和子路径名字符串创建新的 File实例。File(File parent, String child)
从父抽象路径名和子路径名字符串创建新的 File实例。
一 、File(String pathname)
通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
参数:
pathname:就是一个文件/文件夹的路径
注意:
- 构造方法传递的路径可以是绝对路径,也可以是相对路径
- 构造方法传递的路径可以是以文件结尾的,也可以是以文件夹结尾
- 构造方法传递的路径,是存在的或不存在的都可以
构造方法仅仅把字符串的路径封装为File对象,不考虑真实性
示例:
private static void show01() {
File f1 = new File("d:\\1.txt");
System.out.println(f1);//d:\1.txt
File f2 = new File("D:\\Program Files\\IDEA Projects\\EmploymentClass\\1.txt");
System.out.println(f2);//D:\Program Files\IDEA Projects\EmploymentClass\1.txt
File f3 = new File("1.txt");//省略了根目录
System.out.println(f3);//1.txt
File f4 = new File("day09\\abc");//省略了根目录
System.out.println(f4);//day09\abc
}
二、File(String parent, String child)
从父路径名字符串和子路径名字符串创建新的 File实例。
参数:
- String parent:父路径
- String child:子路径
好处:把路径分为了父路径和子路径,使用路径更加灵活,可以传递不同的父路径和子路径来组成不同的File对象。
示例:
private static void show02() {
//String parent = "d:\\";
String parent = "e:\\";
String child = "a.txt";
File f = new File(parent,child);
System.out.println(f);//d:\a.txt e:\a.txt
}
三、File(File parent, String child)
从父抽象路径名和子路径名字符串创建新的 File实例。
参数:
- File parent:父路径
- String child:子路径
好处:把路径分为了父路径和子路径,使用路径更加灵活,可以传递不同的父路径和子路径来组成不同的File对象,父路径是File类型,可以使用File类的方法,对父路径进行一些操作,再和子路径组成一个File对象。
示例:
private static void show03() {
File parent = new File("e:\\");
String child = "a.txt";
File file = new File(parent,child);
System.out.println(file);//e:\a.txt
}
成员方法
获取功能的方法
public String getAbsolutePath()
:返回此File的绝对路径名字符串。public String getPath()
:将此File转换为路径名字符串。public String getName()
:返回由此File表示的文件或目录的名称。public long length()
:返回由此File表示的文件的长度。
一、public String getAbsolutePath()
:返回此File的绝对路径名字符串。
作用:获取构造方法中传递路径的绝对路径,无论构造方法中传递的是相对路径还是绝对路径,此方法返回的都是绝对路径
示例:
private static void show01() {
File f1 = new File("d:\\1.txt");
System.out.println(f1.getAbsolutePath());//d:\1.txt
File f2 = new File("1.txt");
System.out.println(f2.getAbsolutePath());//D:\Program Files\IDEA Projects\EmploymentClass\1.txt
}
二、public String getPath()
:将此File转换为路径名字符串。
作用:获取构造方法中传递的路径
注意:File类重写了Object类的toString方法,toString方法就是getPath方法
public String toString() {
return this.getPath();
}
示例:
private static void show02() {
File f1 = new File("d:\\1.txt");
System.out.println(f1.getPath());//d:\1.txt
System.out.println(f1.toString());
File f2 = new File("1.txt");
System.out.println(f2.getPath());//1.txt
}
三、public String getName()
:返回由此File表示的文件或目录的名称。
作用:获取构造方法中传递路径的文件/文件夹的名称(路径末尾的部分)
示例:
private static void show03() {
File f1 = new File("d:\\1.txt");
System.out.println(f1.getName());//1.txt
File f2 = new File("abc\\ccc");
System.out.println(f2.getName());//ccc
}
四、public long length()
:返回由此File表示的文件的长度。
作用:获取构造方法中传递路径指向文件的大小,单位是字节。
注意:
- 文件夹没有大小
- 构造方法中指定的路径不存在,返回0
private static void show04() {
File f1 = new File("a.txt");
System.out.println(f1.length());//0
File f2 = new File("EmploymentClass.iml");//433字节
System.out.println(f2.length());
File f3 = new File("day09");//0
System.out.println(f3.length());
}
判断功能的方法
public boolean exists()
:此File表示的文件或目录是否实际存在。public boolean isDirectory()
:此File表示的是否为目录。public boolean isFile()
:此File表示的是否为文件。
一、public boolean exists()
:此File表示的文件或目录是否实际存在。
作用:判断构造方法中传递的路径是否为真
返回值:boolean,路径存在返回true,路径不存在返回false
示例:
private static void show01() {
File f1 = new File("d:\\1.txt");
System.out.println(f1.exists());//false
File f2 = new File("EmploymentClass.iml");
System.out.println(f2.exists());//true
}
二、
public boolean isDirectory()
:此File表示的是否为目录。
作用:判断构造方法中的路径是否以文件夹结尾
public boolean isFile()
:此File表示的是否为文件。
作用:判断构造方法中的路径是否以文件结尾
注意:
1. 两个方法的使用前提,都是这个路径必须存在,否则都会返回false
2. 计算机中除了文件就是文件夹,所以两个方法互斥
示例:
private static void show02() {
File f1 = new File("EmploymentClass.iml");
System.out.println(f1.isDirectory());//false
System.out.println(f1.isFile());//true
File f2= new File("day01");
System.out.println(f2.isDirectory());//true
System.out.println(f2.isFile());//false
//路径不存在
File f3= new File("day100");
System.out.println(f3.isDirectory());//false
System.out.println(f3.isFile());//false
}
创建删除功能的方法
public boolean createNewFile()
:创建一个新的空文件,创建文件的路径和名称在构造方法中给出。public boolean mkdir()
:创建由此File表示的目录。public boolean mkdirs()
:创建由此File表示的目录,包括任何必需但不存在的父目录。public boolean delete()
:删除由此File表示的文件或目录。
一、public boolean createNewFile()
:创建一个新的空文件,创建文件的路径和名称在构造方法中给出。
返回值:boolean
- 文件不存在,创建文件,返回true
- 文件存在,不创建文件,返回false
注意:
- 此方法只能创建文件,不能创建文件夹
- 创建文件的路径不存在,会抛出异常
java.io.IOException: 系统找不到指定的路径。
- createNewFile()申明抛出了异常,需要处理这个异常
public boolean createNewFile() throws IOException
- win10系统没有在c盘根目录创建文件的权限
- 若创建的文件路径为: “day09//新建文件夹”,则会创建一个名为"新建文件夹"的文件,而不是文件夹。
示例:
private static void show01() throws IOException {
File f1 = new File("day09\\a.txt");
boolean b1 = f1.createNewFile();
System.out.println("b1:"+b1);
// File f2 = new File("w:\\b.txt");//java.io.IOException: 系统找不到指定的路径。
// boolean b2 = f2.createNewFile();
// System.out.println("b2:"+b2);
// File f3 = new File("c:\\b.txt");//java.io.IOException: 拒绝访问。win10系统没有在c根目录新建文件的权限
// boolean b3 = f3.createNewFile();
// System.out.println("b3:"+b3);
File f4 = new File("day09//新建文件夹");//新建的文件的名称叫"新建文件夹",看类型不看名称
System.out.println(f4.createNewFile());//true
}
二、
public boolean mkdir()
:只能创建单极文件夹
public boolean mkdirs()
:既能创建单极文件夹,又能创建多级文件夹
创建文件夹的路径和名称在构造方法中给出。
返回值:boolean
文件夹不存在,创建文件夹,返回true
文件夹存在,不创建文件夹,返回false;构造方法中的路径不存在返回false
注意:
- 此方法只能创建文件夹,不能创建文件。
- 构造方法中的路径不存在,不会抛出异常,boolean值返回false。
- 若创建文件夹的路径为:“day09\b.txt”,则会创建一个名为"b.txt"的文件夹,而不是文件。
示例:
private static void show02() {
File f1 = new File("day09/abc");
boolean b1 = f1.mkdir();
System.out.println("b1:"+b1);
File f2 = new File("w:\\aaa");
System.out.println(f2.mkdir());//false
File f3 = new File("day09\\111\\222\\333\\444");
System.out.println(f3.mkdir());//false
System.out.println(f3.mkdirs());
File f4 = new File("day09\\b.txt");//创建文件夹的名称叫"b.txt"
System.out.println(f4.mkdirs());
}
三、public boolean delete()
:删除由此File表示的文件或目录。
作用:可以删除文件或文件夹,删除文件/文件夹的路径在构造方法中给出。
返回值:boolean
文件/文件夹存在,删除成功,返回true
文件/文件夹不存在,返回false
文件夹不为空,返回false
注意:
- delete方法,删除的时候,不走回收站,直接在硬盘删除,需要谨慎!
- 当文件夹中还有文件或文件夹时,无法进行删除,需要进行遍历,从最底层的文件夹开始删除。
示例:
private static void show03() {
File f1 = new File("day09//新建文件夹");
System.out.println(f1.delete());
File f2 = new File("day09\\b.txt");
System.out.println(f2.delete());
//删不了
File f3 = new File("day09\\111");
System.out.println(f3.delete());//false
}
目录的遍历
public String[] list()
:返回一个String数组,表示该File目录中的所有子文件或目录。public File[] listFiles()
:返回一个File数组,表示该File目录中的所有的子文件或目录。
注意:
- 遍历文件夹的路径在构造方法中给出
- 只能遍历文件夹,不能遍历文件,遍历文件会抛出空指针异常
- 遍历文件夹的路径必须存在,否则会抛出空指针异常
一、public String[] list()
:返回一个String数组,表示该File目录中的所有子文件或目录。
作用:遍历构造方法中给出的文件夹,获取文件夹中每一个文件/子文件夹的名称,把多个名称存储到一个String类型的数组中返回。
注意:
- 不会遍历子文件夹
- 隐藏文件夹或文件也可以被遍历
示例:
private static void show01() {
File file = new File("day09");
String[] arr = file.list();
for (String name : arr) {
System.out.println(name);
}
}
二、public File[] listFiles()
:返回一个File数组,表示该File目录中的所有的子文件或目录。
作用:遍历构造方法中给出的文件夹,获取文件夹中每一个文件/子文件夹,把文件/子文件夹封装为File对象,多个File对象,存储到一个File数组中返回。
示例:
private static void show02() {
File file = new File("day09");
File[] files = file.listFiles();
for (File f : files) {
System.out.println(f);
}
}