File类
File类的作用
File类是Java中用于表示文件和目录的抽象类。它提供了一组用于操作文件和目录的方法。File类可以用于创建、删除、重命名、检查文件和目录的存在性、获取文件和目录的属性等操作。
File类的主要作用包括:
- 创建文件和目录:可以使用File类创建新的文件或目录。通过调用File类的构造方法,可以指定文件或目录的路径和名称。
- 操作文件和目录:File类提供了一系列方法用于操作文件和目录,例如复制文件、移动文件、删除文件、创建目录等。
- 文件和目录的属性获取:可以使用File类获取文件和目录的各种属性,如文件名、路径、大小、修改时间等。
- 文件和目录的遍历:File类提供了方法来遍历目录中的文件和子目录,可以获取目录下的所有文件和子目录的列表。
- 文件和目录的判断:可以使用File类来判断文件和目录是否存在、是否可读、是否可写等。
需要注意的是,File类只表示文件路径的抽象,它并不表示文件内容的操作。如果需要对文件内容进行读写操作,可以使用其他类,如InputStream、OutputStream、Reader、Writer等。
在Java的新版本中,推荐使用Path类和Files类来代替File类进行文件和目录的操作,因为Path类和Files类提供了更多的功能和更简洁的API。
File类的使用
//指定路径给文件
String path = "D:\\io";
File file = new File(path);
// 创建目录
boolean created = file.mkdir();
// 创建多级目录
boolean createdAll = file.mkdirs();
// 检查文件或目录是否存在
boolean exists = file.exists();
// 检查是否为目录
boolean isDirectory = file.isDirectory();
// 检查是否为文件
boolean isFile = file.isFile();
// 获取文件或目录的名称
String name = file.getName();
// 获取文件或目录的绝对路径
String absolutePath = file.getAbsolutePath();
// 删除文件或目录
boolean deleted = file.delete();
// 重命名文件或目录
File newFile = new File("D:\\new_io");
boolean renamed = file.renameTo(newFile);
// 获取文件大小
long size = file.length();
// 获取文件最后修改时间
long lastModified = file.lastModified();
下面是一些常见的File类的使用示例:
2.创建文件或目录:
File file = new File("path/to/file.txt");
boolean created = file.createNewFile(); // 创建文件
File dir = new File("path/to/directory");
boolean created = dir.mkdir(); // 创建目录
2.检查文件或目录的存在性:
File file = new File("path/to/file.txt");
boolean exists = file.exists(); // 检查文件是否存在
File dir = new File("path/to/directory");
boolean exists = dir.exists(); // 检查目录是否存在
3.获取文件或目录的属性:
File file = new File("path/to/file.txt");
String name = file.getName(); // 获取文件名
String path = file.getAbsolutePath(); // 获取绝对路径
boolean isDirectory = file.isDirectory(); // 检查是否为目录
boolean isFile = file.isFile(); // 检查是否为文件
long size = file.length(); // 获取文件大小(字节数)
long lastModified = file.lastModified(); // 获取最后修改时间(毫秒数)
4.遍历目录中的文件和子目录:
File dir = new File("path/to/directory");
File[] files = dir.listFiles(); // 获取目录中的所有文件和子目录
for (File file : files) {
if (file.isDirectory()) {
// 处理子目录
} else {
// 处理文件
}
}
5.删除文件或目录:(删除文件夹时必须保证文件夹为空,否则将删除失败)
File file = new File("path/to/file.txt");
boolean deleted = file.delete(); // 删除文件
File dir = new File("path/to/directory");
boolean deleted = dir.delete(); // 删除目录(只能删除空目录)
注意:
//绝对路径:带有盘符的路径称之为绝对路径 //相对路径:不带盘符的路径称之为相对路径,相对路径相对于当前工程来定位的。
递归
概念
递归是一种在方法内部调用自身的编程技巧。在处理文件和目录的操作中,递归可以用于遍历目录树、搜索文件、计算目录大小等需要对目录及其子目录进行递归处理的情况。
在方法内部再调用自身就是递归。递归分为直接递归和间接递归。
直接递归就是方法自己调用自己。
间接递归就是多个方法之间相互调用,形成一个闭环,从而构成递归。
使用递归时必须要有出口,也就是使递归停下来。否则,将导致栈内存溢出。j就是死循环
下面是几个对file文件的操作示例:
列举出一个文件夹中所有的*.class**文件*
private static void findClass(File folder){
FileFilter filter = new FileFilter() {
@Override
public boolean accept(File f) {
return f.getName().endsWith(".class") || f.isDirectory() ;
}
};
//使用文件过滤器来过滤文件。满足条件的才会在数组中出现
File[] files = folder.listFiles();
if(files != null){
for (File file:files) {
if(file.isDirectory()){
findClass(file);//递归:调用自身,就必须有出口
}else{
System.out.println(file.getPath());//出口
}
}
}
}
删除文件夹
private static void deleteFolder(File folder){
File[] files = folder.listFiles();
//这里一定要验证files数组是否为null
if(files != null){
for (File f:files) {
if(f.isDirectory()){//是目录
deleteFolder(f);//是目录,就在调用方法删除文件夹,形成递归删除
}else{
f.delete();//不是目录就直接删除
}
}
}
folder.delete();//还需要删除文件夹下面的文件夹
}
扫描文件夹
private static void scanFolder(File folder){
//文件夹里面存在子文件,这些子文件可能是文件,也可能是文件夹
//得到文件夹下下一级子文件(包含文件和文件夹)
File[] files = folder.listFiles();
//这里一定要校验files数组是否为null
if (files != null) {
for (File f:files) {
if(f.isDirectory()){//是目录
scanFolder(f);//自己调用自己就称为递归
} else {
System.out.println(f.getPath());
}
}
}
}