1. 概述
File类是文件和目录 路径名的表示,主要用于文件和目录的创建、查找和删除等操作。
文件(File): Xxx.txt, Xxx.java, Xxx.avi
目录(Directory): 文件夹
文件路径 文件夹路径
FIle可以表示文件或文件夹的路径, 但是这个路径可能存在, 也可能不存在
2.file构造方法
public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。
绝对路径 : 从盘符开始, 一直表示到最后的文件或者文件夹
相对路径 : 相对于某一个文件夹开始, 后面的路径
这里来举两个例子来进行说明:
demo1:
File fileOne = new File("C:\\Users\\liguang\\Desktop\\filetest\\one");
one是一个文件夹,那么fileOne代表的就是windows操作系统下的一个文件夹,我们可以来操作这个文件夹下面的文件和文件夹。
demo2:
File file = new File(fileOne,"a.txt");
在上面的文件夹基础之上,建立一个名叫a.txt的文件,那么file代表的就是名叫a.txt的文件
demo3:
File file = new File("C:\\Users\\liguang\\Desktop\\filetest\\one","lalal.txt");
3.file的创建方法
public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。 //file.createNewFile()
public boolean mkdir():创建由此File表示的目录。/单级文件夹,返回是否创建成功
public boolean mkdirs():创建由此File表示的目录,包括任何必需但不存在的父目录。// 多级: 创建前面必须但不存在的文件夹
举例说明:
File file = new File("C:\\Users\\liguang\\Desktop\\filetest\\one","lalal.txt");
System.out.println("文件的绝对路径是:"+file.getAbsolutePath());
if (!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("文件的大小是:"+file.length());
判断是否存在这个文件,如果存在,那么直接输出对应的文件大小即可。如果不存在,那么创建文件并输出。
File newFile = new File(fileOne,"hello/world/a");
if (!newFile.exists()){
// newFile.mkdir();
newFile.mkdirs();
}
使用mkdir这个方法,无法创建出来对应的文件夹,因为这里有多层,而不是单层;
使用mkdirs这个方法,不管是单层文件夹还是多层文件夹,都可以创建成功。
4.删除方法
public boolean delete() :删除由此File表示的文件或目录。//file.delete())
特点:
1. 删除的内容不走回收站
2. 只能删除空文件件
demo:
File newFile = new File(fileOne,"hello/world/a");
if (!newFile.exists()){
newFile.mkdirs();
}
newFile.delete();
在进行删除的时候可以发现,删除的只有一层,也就是说只把a的给删除掉了,因为newFile代表的就只是a这个文件夹,而不是hello/world/a这一整个目录。
5.获取功能
public String getAbsolutePath() :返回此File的绝对路径名字符串。
public String getPath() :将此File转换为路径名字符串。 获取构造方法中的路径
public String getName() :返回由此File表示的文件或目录的名称。
public long length() :返回由此File表示的文件的长度。 (字节个数)不能获取文件夹的长度,
对应的demo如下所示:
public static void main(String[] args) {
File fileOne = new File("C:\\Users\\liguang\\Desktop\\filetest\\one");
// 三个判断方法
if (fileOne.isDirectory()){
System.out.println("这个是文件夹");
}
if (fileOne.isFile()){
System.out.println("这个是文件夹");
}
if (fileOne.exists()){
System.out.println("当前文件所表示的文件或者是文件夹是否存在?"+fileOne.exists());
}
System.out.println("获取方法");
System.out.println("-----------------------------------------------------------");
// 获取得到路径是一样的效果
String absolutePath = fileOne.getAbsolutePath();
System.out.println("当前文件的绝对路径是:"+absolutePath);
String path = fileOne.getPath();
System.out.println("当前文件的路径是:"+path);
String name = fileOne.getName();
System.out.println("获取得到文件的名称或者是文件夹的文字是:"+name);
// 获取得到文件的大小,不能够表示文件夹的大小
long length = fileOne.length();
System.out.println("文件夹的大小是:"+length);
// 创建一个文件a.txt
File file = new File(fileOne,"a.txt");
long length1 = file.length();
System.out.println("a.txt文件的大小是:"+length1);
System.out.println("获取得到a.txt的绝对路径是:"+file.getAbsolutePath());
}
6.判断方法
public boolean exists() :此File表示的文件或目录是否实际存在。//file.exists()
public boolean isDirectory() :此File表示的是否为目录。//同上
public boolean isFile() :此File表示的是否为文件。//同上
具体的demo可以参考上面的案例。
7.遍历文件夹
获取当前文件夹下(一层)中, 所有的文件和文件夹
String[] list() : 获取该文件夹下所有文件和文件夹的名字
File[] listFiles() : 获取该文件夹下所有文件和文件夹(以File的形式获取)
File[] listFiles(FileFilter) :当前文件夹中的所有文件和文件夹, 都会作为参数执行FileFilter中的accept方法,
如果返回true, 文件就存入File数组中;
如果返回false, 文件就不存了
对应的代码所示:
public static void main(String[] args) {
File file = new File("C:\\Users\\liguang\\Desktop\\filetest\\one");
// 列举出来文件夹下面的所有的文件和文件夹(如果是文件夹,里面还有文件,那么只会列举出来文件夹的名称)
String[] list = file.list();
for (String s : list) {
System.out.println("文件或者是文件夹的名称是:"+s);
}
System.out.println("--------------------");
File[] files = file.listFiles();
for (File file1 : files) {
if (file1.isFile()){
System.out.println("文件名称是:"+file1.getName());
}
}
System.out.println("----------------------");
File[] listFilesFilter = file.listFiles(t -> t.isFile() & t.getName().endsWith("a.txt"));
for (File file1 : listFilesFilter) {
System.out.println(file1.getName());
}
}
8、递归遍历文件夹并输出文件
public class FileDemoThree {
public static void main(String[] args) {
File file = new File("C:\\Users\\liguang\\Desktop\\filetest\\one");
printFileName(file);
}
/**
* 递归输出文件名称
*/
private static void printFileName(File file){
if (Objects.nonNull(file)){
File[] listFiles = file.listFiles();
for (File listFile : listFiles) {
if (listFile.isFile()){
System.out.println("对应的文件名称是:"+listFile.getName());
}else {
printFileName(listFile);
}
}
}
}
}
在递归期间的注意事项:
1. 递归必须要有出口
2. 就算有出口, 调用的次数不能过多