一、File类
1.java.io.File
类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作
2.构造方法:
public File(String pathname)
:通过文件路径名创建 File实例public File(String parent, String child)
:通过父路径名字符串和子路径名字符串创建 File实例public File(File parent, String child)
:通过父级File对象和子路径名字符串创建File实例
//文件路径名
String pathname = "E:\\aaa\\aa";
File file = new File(pathname);
//通过父路径和子路径字符串
String parent = "E:\\aaa\\aa";
String child = "b.txt";
File file2 = new File(parent,child);
//通过父级File对象和子路径字符串
File parentDir = new File("E:\\aaa\\aa");
String child2 = "b.txt";
File file3 = new File(parentDir,child2);
3.常用方法:
(1)获取功能的方法:
-
public String getAbsolutePath()
:返回此File的绝对路径名字符串 -
public String getPath()
:将此File转换为路径名字符串。 -
public String getName()
:返回由此File表示的文件或目录的名称 -
public long length()
:返回由此File表示的文件的长度
File f = new File("\\aaa\\aa\\b.txt");
System.out.println("文件绝对路径:" + f.getAbsolutePath()); //文件绝对路径:D:\aaa\aa\b.txt
System.out.println("文件构造路径:" + f.getPath()); //文件构造路径:\aaa\aa\b.txt
System.out.println("文件名称:" + f.getName()); //文件名称:b.txt
System.out.println("文件长度:" + f.length() + "字节"); //文件长度:0字节
(2)绝对路径和相对路径
- 绝对路径:从盘符开始的路径,这是一个完整的路径
- 相对路径:相对于项目目录的路径,这是一个便捷的路径,开发中经常使用
//E:\aaa\aa下的b.txt文件
File f = new File("E:\\aaa\\aa\\b.txt");
System.out.println(f.getAbsolutePath()); //E:\aaa\aa\b.txt
//项目下的b.txt
File f2 = new File("b.txt");
System.out.println(f2.getAbsolutePath()); //D:\IdeaProjects\feisi\b.txt
(3)判断功能的方法:
public boolean exists()
:此File表示的文件或目录是否实际存在public boolean isDirectory()
:此File表示的是否为目录public boolean isFile()
:此File表示的是否为文件
File f = new File("E:\\aaa\\aa\\b.txt");
File f2 = new File("E:\\aaa\\aa");
//判断是否存在
System.out.println(f.exists()); //true
System.out.println(f2.exists()); //true
//判断是文件还是目录
System.out.println(f.isFile()); //true
System.out.println(f.isDirectory()); //false
(4)创建删除功能的方法
public boolean createNewFile()
:当且仅当具有该名称的文件尚不存在时,创建一个新的空文件public boolean delete()
:删除由此File表示的文件或目录public boolean mkdir()
:创建由此File表示的目录public boolean mkdirs()
:创建由此File表示的目录,包括任何必需但不存在的父目录
//文件的创建
File f = new File("a.txt");
System.out.println(f.createNewFile()); //true
//目录的创建
File f2 = new File("Dir");
System.out.println(f2.mkdir()); //true
//创建多级目录
File f3 = new File("Dir\\dir");
System.out.println(f3.mkdirs()); //true
//文件的删除(如果此File目录,则目录必须为空才能删除,文件则直接删除)
System.out.println(f.delete()); //true
(5)目录的遍历
public String[] list()
:返回一个String数组,表示该File目录中的所有子文件或目录public File[] listFiles()
:返回一个File数组,表示该File目录中的所有的子文件或目录
File dir = new File("E:\\aaa");
//获取当前目录下的文件以及文件夹的名称
String[] names = dir.list();
for (String name : names) {
System.out.println(name); //a.txt aa
}
//获取当前目录下的文件以及文件夹对象
File[] files = dir.listFiles();
for (File file : files) {
System.out.println(file); //E:\aaa\a.txt E:\aaa\aa
}
4.递归打印多级目录
遍历之前,我们不知道有多少级目录,所以我们要使用递归实现
public static void main(String[] args) {
File dir = new File("E:\\aaa");
printDir(dir);
// 打印结果
// E:\aaa\a.txt
// E:\aaa\aa
// E:\aaa\aa\b.txt
}
public static void printDir(File dir) {
File[] files = dir.listFiles();
for (File file : files) {
if(file.isFile()){
System.out.println(file.getAbsolutePath());
} else {
System.out.println(file.getAbsolutePath());
printDir(file);
}
}
}
二、典型案例
搜索D:\aaa
目录中的.java
文件
分析:
- 目录搜索,无法判断多少级目录,所以使用递归,遍历所有目录。
- 遍历目录时,获取的子文件,通过文件名称,判断是否符合条件。
代码实现:
public static void main(String[] args) {
// 创建File对象
File dir = new File("D:\\aaa");
// 调用打印目录方法
printDir(dir);
}
public static void printDir(File dir) {
// 获取子文件和目录
File[] files = dir.listFiles();
// 循环打印
for (File file : files) {
if (file.isFile()) {
// 是文件,判断文件名并输出文件绝对路径
if (file.getName().endsWith(".java")) {
System.out.println("文件名:" + file.getAbsolutePath());
}
} else {
// 是目录,继续遍历,形成递归
printDir(file);
}
}
}