一.概述
java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
二.常用方法
1.构造方法
方法 | 说明 |
public File(String pathname) | 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。 |
pubblic File(File parent, String child) | 从父抽象路径名和子路径名字符串创建新的 File实例。 |
public File(String parent, String child) | 从父路径名字符串和子路径名字符串创建新的 File实例 |
构造方法举例如下:
import java.io.File;
public class Test {
public static void main(String[] args) {
String pathname1 = "D://a";
String pathname2 = "aa.txt";
//file1用来抽象表示D盘下的a目录
File file1 = new File(pathname1);
//file2用来抽象表示D盘下的a目录下的aa.txt文件
File file2 = new File(pathname1,pathname2);
//file3用来抽象表示D盘下的a目录下的aa.txt文件
File file3 = new File(file1,pathname2);
}
}
对于上面的代码来说,file1,file2,file3都可以用来抽象表示该路径的某个目录或文件,注意这里的抽象是指无论该路径下是否存在该目录或文件,File类的实例都可以代表该路径下的目录或文件,如果不存在,后期可以通过File的普通方法进行创造。
2.常用普通方法
2.1创建和删除方法:
方法 | 说明 |
public boolean createNewFile() | 当且仅当具有该名称的文件尚不存在时,创建一个由该抽象路径名命名的新的空文件 |
public boolean mkdir() | 创建由此File对象所表示的目录。当且仅当目录为空时才可删除目录 |
public boolean mkdirs() | 创建由此File对象所表示的目录。包括任何不存在的父级目录 |
public boolean delete() | 删除该File对象所表示的目录或文件 |
2.2查看File类对象信息方法:
方法 | 说明 |
public String getName() | 获得由此File对象表示的文件或目录的名称。 |
public long length() | 获得由此File对象表示的文件的长度 |
public String getAbsolutePath() | 获得由此File对象表示的文件或目录的绝对路径 |
public File getAbsolutePath() | 获得此抽象路径名的绝对形式的File对象 |
public String getPath() | 将此File对象的抽象路径转换为路径名字符串。 |
绝对路径:从盘符开始到该文件名结束的一个完整路径,
相对路径:相对于该项目目录的不完整的路径。
2.3判断方法:
方法 | 说明 |
public boolean isAbsolute() | 测试这个抽象路径名是否是绝对的 |
public boolean isDirectory() | 测试此抽象路径名表示的文件是否为目录 |
publicboolean isFile() | 测试此抽象路径名表示的是否为文件 |
public boolean exists() | 测试此抽象路径名表示的文件或目录是否实际存在 |
pulic boolean isHidden() | 测试此抽象路径名命名的文件是否为隐藏文件 |
2.3遍历方法:
方法 | 说明 |
public String[] list() | 返回一个String数组,表示该File对象表示的目录中的所有子文件或目录的字符串形式 |
public File[] listFiles() | 返回一个File数组,表示该File目录中的所有的子文件或目录的File对象形式 |
三.常用方法的使用(经典例题)
1.遍历一个目录下的所有文件和目录(方法一)
import java.io.File;
public class FileTest {
public void showDir(File file) {
File []files = file.listFiles();
//返回一个File数组,表示该File目录中的所有的子文件或目录
if(files != null && files.length !=0) {
为文件时,files为null,,,,当是空目录时候,files.length = 0
for(File f : files) {
showDir(f);
}
}
System.out.println(file);
}
public static void main(String[] args) {
FileTest ft = new FileTest();
ft.showDir(new File("D://a"));
}
}
运行结果:
D:\a\a1\a11
D:\a\a1\a11.txt.txt
D:\a\a1
D:\a\a2\a22.txt.txt
D:\a\a2
D:\a\a3
2.遍历一个目录下的所有文件和目录(方法二)
import java.io.File;
//方法二:遍历一个目录下的所有文件和目录
public class FileTest1 {
public void showDir(File file) {
File[] files = file.listFiles();
for (File f : files) {
if(f.isFile()) {
System.out.println("文件:"+f);
}else {
this.showDir(f);
System.out.println("目录:"+f);
}
}
}
public static void main(String[] args) {
FileTest1 ft = new FileTest1();
ft.showDir(new File("D://a"));
}
}
运行结果:
目录:D:\a\a1\a11
文件:D:\a\a1\a11.txt.txt
目录:D:\a\a1
文件:D:\a\a2\a22.txt.txt
目录:D:\a\a2
目录:D:\a\a3
3.按层次遍历一个文件的父级目录
package File类;
import java.io.File;
public class FileTest {
public void showParent(File file) {
File parentFile = file.getParentFile();
if(parentFile != null) {
System.out.println(parentFile);
showParent(parentFile);
}
}
public static void main(String[] args) {
FileTest ft = new FileTest();
ft.showParent(new File("D://a//a1//a11//ooo.txt.txt"));
}
}
运行结果:
D:\a\a1\a11
D:\a\a1
D:\a
D:\
4.删除一个目录下 的所有文件以及目录
package File类;
import java.io.File;
//递归删除一个目录下 的所有文件以及目录
public class FileTest2 {
public void deleteDir(File file) {
File[] files = file.listFiles();
if(files != null && files.length !=0) {
为文件时,files为null,,,,当是空目录时候,files.length = 0
for (File file2 : files) {
deleteDir(file2);
}
}
file.delete();
}
public static void main(String[] args) {
File file = new File("D://a");
FileTest2 ft2 = new FileTest2();
ft2.deleteDir(file);
System.out.println("删除成功");
}
}
运行结果:
删除成功
注:D盘a目录下的所有文件以及目录被删除,delete()方法只能删除空目录或文件
5.搜索 D:\a 目录中的 .txt结尾的文件。
package File类;
import java.io.File;
//搜索一个目录下以后缀名为.txt的所有文件
public class FileTest3 {
public static void findFile(File file) {
File files[] = file.listFiles();
for(File file1: files) {
if(file1.isFile()) {
if(file1.getName().endsWith(".txt")) {
System.out.println("以.txt结尾的文件:"+file1.getAbsolutePath());
}
}else {
findFile(file1);
}
}
}
public static void find(File file) {
File[] files = file.listFiles();
if(files != null && files.length !=0) {
为文件时,files为null,,,,当是空目录时候,files.length = 0
for (File file1 : files) {
find(file1);
}
}else {
if(file.getName().endsWith(".txt")) {
System.out.println("以.txt结尾的文件:"+file.getAbsolutePath());
}
}
}
public static void main(String[] args) {
File file = new File("D://a");
//findFile(file);
find(file);
}
}
运行结果:
以.txt结尾的文件:D:\a\a1\新建文本文档.txt
以.txt结尾的文件:D:\a\a2\a22.txt.txt
以.txt结尾的文件:D:\a\a4\a44\1.txt