File类
一、概述
java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
二、使用
1、构造方法
public File(String pathname)//通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。
public File(String parent,String child)//从父路径名字符串和子路径名字符串创建新的File实例
-好处:父路径和子路径,可以单独书写,使用起来非常灵活;父路径和子路径都可以变化
:可以理解为 这个文件所在的路径,与这个文件的名字或其下的文件夹名字
public File(File parent,String child)//从父抽象路径名和子路径名字符串创建新的 File实例。
-好处1:父路径和子路径,可以单独书写,使用起来非常灵活;父路径和子路径都可以变化
2:父路径是File类型,可以使用File的方法对路径进行一些操作,再使用路径创建对象
:可以理解为一个文件对象(应该只可以是文件夹),与另一个路径(文件、文件夹)
2、常用方法
(1)获取功能的方法
public string getAbsolutePath()//返回此File的绝对路径名字符串。
public String getPath()//将此File转换为路径名字符串。
public string getName()//返回由此File表示的文件或目录的名称。
public long length()//返回由此File表示的文件的长度。
-获取的是构造方法指定的文件的大小,以 字节 为单位
-注意:
文件夹是没有大小概念的。
如果构造方法中给出的路径不存在,那么Length方法返回 0
(2)判断功能的方法
public boolean exists()//此File表示的文件或目录是否实际存在。
public boolean isDirectory()//此File表示的是否为目录。
public boolean isFile()//此File表示的是否为文件。
(3)创建删除功能的方法
public boolean createNewFile()//当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
public boolean delete()//删除由此File表示的文件或目录。
-返回值:布尔值
-true:文件/文件夹删除成功,返回true
-false:文件夹中有内容,不会删除返回false;构造方法中路径不存在false
-注意:
-delete方法是直接在硬盘删除文件/文件夹,不走回收站,删除要谨慎
public boolean mkdir()//创建由此File表示的目录。
public boolean mkdirs()//创建由此File表示的目录,包括任何必需但不存在的父目录。
(4)目录的遍历
public String[] list()//返回一个String数组,表示该File目录中的所有子文件或目录(包括隐藏)。
public File[] listFiles()//返回一个File数组,表示该File目录中的所有的子文件或目录(包括隐藏)。
-注意:
-list方法和ListFiles方法遍历的是构造方法中给出的目录
-如果构造方法中给出的目录的路径不存在,会抛出空指针异常
-如果构造方法中给出的路径不是一个目录,也会抛出空指针异常
三、文件过滤器
在FiLe类中有两个和 listFiles( ) 重载的方法,方法的参数传递的就是过滤器
-
File[ ] listFiles (FileFilter filter)
java.io.FileFilter接口 : 用于抽象 路径名(FiLe对象)的过滤器。
- 作用:用来过滤文件(FiLe对象)
- 抽象方法 : 用来过滤文件的方法
- boolean accept(File pathname)测试指定抽象路径名是否应该包含在某个路径名列表中。
- 参数 :
- File pathname : 使用ListFiles方法遍历目录,得到的每一个文件对象
-
File[] listFiles (FiLenameFiLter filter)
java.io.FilenameFilter接口 : 实现此接口的类实例可用于过滤器文件名。
- 作用 : 用于过滤文件名称
- 抽象方法 : 用来过滤文件的方法
- boolean accept(File dir,String name)测试指定文件是否应该包含在某一文件列表中。
- 参数 :
- File dir : 构造方法中传递的被遍历的目录, [
这个文件对象所在的目录,不包含这个文件的名称
] - String name : 使用ListFiles方法遍历目录,获取的每一个文件/文件夹的名称, [
这个文件的名称
]
- File dir : 构造方法中传递的被遍历的目录, [
-
注意 :
- 两个过滤器接口是没有实现类的,需要我们自己写实现类,重写过滤的方法accept,在方法中自己定义过滤的规则
例子:
(1)、FileFilterImpl
/**
* @ClassName:FileFilterImpl
* @创建者: LLY
* @创建时间: 2021/5/8 19:20
* @version: 1.0
* @描述: FileFilter 文件过滤器
*/
public class FileFilterImpl implements FileFilter {
private String type;
public FileFilterImpl(String type) {
this.type = type;
}
@Override
public boolean accept(File file){
return file.getName().toLowerCase().endsWith(this.type) || file.isDirectory();
}
}
(1)、实验类
public class RecursionFile3 {
public static void main(String[] args) {
File file = new File("G:\\pycharm-workspace\\爬虫_数据分析");
Scanner scanner = new Scanner(System.in);
System.out.print("请输入要查找的文件类型:");
String type = scanner.next();
gerAllFiles1(file,type);
scanner.close();
}
//FileFilter接口 文件过滤器 以匿名内部类的形式1
//accept(File file)
public static void gerAllFiles1(File file,String type){
File[] files = file.listFiles(new FileFilter() {
//FileFilter接口 文件过滤器
@Override
public boolean accept(File file) {
return file.getName().toLowerCase().endsWith(type) || file.isDirectory();
}
});
for (File file1 : files) {
if (file1.isDirectory())
gerAllFiles1(file1,type);
else
System.out.println(file1);
}
}
//FileFilter接口 文件过滤器 以外部类的形式
public static void gerAllFiles2(File file,String type){
File[] files = file.listFiles(new FileFilterImpl(type));
for (File file1 : files) {
if (file1.isDirectory())
gerAllFiles2(file1,type);
else
System.out.println(file1);
}
}
//FilenameFilter接口 文件过滤器 以匿名内部类的形式2
//accept(File file, String s)
public static void gerAllFiles3(File file,String type){
File[] files = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File file, String s) {
return new File(file, s).isDirectory()||s.toLowerCase().endsWith(type);
}
});
for (File file1 : files) {
if (file1.isDirectory())
gerAllFiles3(file1,type);
else
System.out.println(file1);
}
}
}