概述
java.io.File
类是文件和目录路径名的抽象表示,主要用于文件和目录的创建,查找,删除等操作。
构造方法
-
File(File parent, String child)
从父抽象路径名和子路径名字符串创建新的 File实例。 -
File(String pathname)
通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。参数pathname为路径名称(字符串形式) 路径可以以文件结尾,也可以以文件夹结尾 路径可以存在,也可以不存在
-
File(String parent, String child)
从父路径名字符串和子路径名字符串创建新的 File实例。把路径分为了两部分 parent:父路径 child: 子路径 好处:父路径和子路径可以单独书写,使用起来很灵活
-
File(URI uri)
通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。
静态成员变量
-
static String pathSeparator
与系统相关的路径分隔符字符,为方便起见,表示为字符串。路径分隔符: windows系统:;(分号) linux系统: :(冒号)
-
static char pathSeparatorChar
与系统相关的路径分隔符。 -
static String separator
与系统相关的默认名称分隔符字符,以方便的方式表示为字符串。名称分隔字符: windows: \ (反斜杠) linux: /(正斜杠)
-
static char separatorChar
与系统相关的默认名称分隔符。
注意: 为了区分系统,尽量不要把路径写死,用这些静态变量表示
绝对路径和相对路径
- 绝对路径: 是一个完整的路径(以盘符开始)
- 相对路径:是一个简化的路径(以当前项目的根目录开始)
常用方法
1.获取
String getAbsolutePath()
: 返回此File对象的绝对路径String getPath()
: 返回此File对象的相对路径String getName()
: 返回此File对象表示的文件名称或目录名称long length()
:返回此File对象表示的文件的长度(字节为单位,文件夹没有大小的概念,如果路径不存在,返回0)
2.判断
boolean exists()
: 此File对象表示的文件或目录是否存在boolean isDirectory()
: 此File对象表示的是否是目录boolean isFile()
: 此File对象表示的是否为文件
3.创建和删除
-
boolean createNewFile()
: 当且仅当具有该名称的文件不存在时,创建一个新的空文件1.此方法只能创建文件,不能创建文件夹 2.创建文件的路径必须存在,否则会抛异常 3.此方声明抛出了IOException,使用时必须处理异常
-
boolean delete()
: 删除由此File对象表示的目录或文件 -
boolean mkdir()
: 创建由此File对象表示的目录(单级文件夹) -
boolean mkdirs()
: 创建由此File对象表示的目录,包括任何必须但不存在的父目录(单极或多级文件夹)
4.目录的遍历
-
String[] list()
: 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。 -
File[] listFiles()
: 返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。1.路径不存在,会抛出空指针异常 2.如果路径不是一个目录,也会抛出空指针异常 3.隐藏文件或隐藏文件夹也可以遍历到
示例:递归打印多级目录
import java.io.File;
public class 递归打印多级目录 {
public static void main(String[] args) {
File file = new File("D:\\Drivers");
getAllFiles(file);
}
public static void getAllFiles(File dir){
File[] files = dir.listFiles();
for (File file : files) {
System.out.println(file);
if(file.isDirectory()) //如果是一个目录就继续遍历
getAllFiles(file);
}
}
}
文件过滤器
遍历目录有这样两个方法:
File[] listFiles(FileFilter filter)
String[] list(FilenameFilter filter)
其中方法的参数传递的就是过滤器
java.io.FileFilter
接口
作用:用来过滤文件
接口中只有一个方法:boolean accept(File pathname)
java.io.FilenameFilter
接口
作用:用来过滤文件名称
接口中只有一个方法:boolean accept(File dir, String name)
注意:两个接口是没有实现类的,需要我们自己写实现类,重写accept方法,自定义过滤规则
import java.io.File;
public class 过滤器 {
public static void main(String[] args) {
File file = new File("D:\\Drivers");
getAllFiles(file);
}
public static void getAllFiles(File dir){
//1.FileFilter
// File[] files = dir.listFiles(file -> file.getName().endsWith("exe") || file.isDirectory()); //这里过滤掉不是以exe结尾的文件(因为后面还要递归遍历文件夹,所以文件夹也保留)
//2.FilenameFilter
File[] files = dir.listFiles((d, name) -> name.endsWith("exe") || new File(d, name).isDirectory());
for (File file : files) {
System.out.println(file);
if(file.isDirectory()) //如果是一个目录就继续遍历
getAllFiles(file);
}
}
}