2. File类(重点)
2.1 基本概念
java.io.File类主要用于描述文件或目录路径的抽象表示信息,可以获取文件或目录的特征信息。
2.2 常用的方法
方法声明 | 功能概述 |
---|---|
File(String pathname) | 根据参数指定的路径名来构造对象 |
File(String parent, String child) | 根据参数指定的父路径和子路径信息构造对象 |
File(File parent, String child) | 根据参数指定的父抽象路径和子路径信息构造对象 |
boolean exists() | 测试此抽象路径名表示的文件或目录是否存在 |
String getName() | 用于获取文件的名称 |
long length() | 返回由此抽象路径名表示的文件的长度 |
long lastModified() | 用于获取文件的最后一次修改时间 |
String getAbsolutePath() | 用于获取绝对路径信息 |
boolean delete() | 用于删除文件,当删除目录时要求是空目录 |
boolean createNewFile() | 用于创建新的空文件 |
boolean mkdir() | 用于创建目录 |
boolean mkdirs() | 用于创建多级目录 |
File[] listFiles() | 获取该目录下的所有内容 |
boolean isFile() | 判断是否为文件 |
boolean isDirectory() | 判断是否为目录 |
File[] listFiles(FileFilter filter) | 获取目录下满足筛选器的所有内容 |
2.2.1 实现对文件的操作
//文件的操作
//1.构造一个File对象与d:\\a.txt关联
File f1 = new File("e:\\a.txt"); // 这里 \\==/
//2.判断文件是否存在,若存在则获取文件的特征信息并打印后删除文件
if (f1.exists()) {
//获取文件的名称 大小
System.out.println("文件的名称是:" + f1.getName());
System.out.println("文件的大小是:" + f1.length());
//获取最后一次修改的时间
Date d1 = new Date(f1.lastModified());
SimpleDateFormat sdf = new SimpleDateFormat();
System.out.println("最后一次修改是:" + sdf.format(d1));
//获取文件的路径
System.out.println("文件的绝对路径是:" + f1.getAbsolutePath()); //绝对路径
//文件的删除
System.out.println(f1.delete() ? "删除成功" : "删除失败");
} else {
//3.若文件不存在则创建文件
System.out.println(f1.createNewFile() ? "文件创建成功" : "文件创建失败");
}
2.2.2 实现对目录的操作
//5.实现指定目录下的所有内容打印出来
File f3 = new File("e:/a");
//获取f3的所有内容并记录到一维数组当中
File[] files = f3.listFiles();
//遍历数组
for (File file : files) {
String name = file.getName();
//判断是否是文件,如果是则打印出来
if (file.isFile()) {
System.out.println(name);
}
//判断是否是目录,如果是则加上[]再打印出来
if (file.isDirectory()) {
System.out.println("[" + name + "]");
}
}
System.out.println("==============================");
//6.实现获取指定目录内容获取的同时进行过滤
//File[] listFiles(FileFilter filter) 返回值是数组类型,参数列表是接口类型,要先实现接口的实例化
//匿名表达式:接口/父类名称 引用变量名=new 接口/父类名称() {方法体};
/* FileFilter fileFilter= new FileFilter() {
@Override
public boolean accept(File pathname) { 测试指定的抽象路径名是否应包含在路径名列表中
return pathname.getName().endsWith(".avi"); //返回的是true
}
};*/
//正则表达式:(参数列表)-> {方法体}
FileFilter fileFilter = (File pathname) -> { //测试指定的抽象路径名是否应包含在路径名列表中
return pathname.getName().endsWith(".avi");
};
File[] files1 = f3.listFiles(fileFilter); //将符合条件的文件名放入数组中
for (File ff : files1) {
System.out.println(ff); //e:\a\c.avi
}
System.out.println("----------------------------");
//7.使用递归的思想获取目录极其子目录的内容
show(new File("e:/a"));
//自定义成员方法实现指定目录以及子目录中所有内容的打印
//此方法与main方法平级
public static void show(File file) {
//获取f3的所有内容并记录到一维数组当中
File[] files = file.listFiles();
//遍历数组
for (File tf : files) {
String name = tf.getName();
//判断是否是文件,如果是则打印出来
if (tf.isFile()) {
System.out.println(name);
}
//判断是否是目录,如果是则加上[]再打印出来
if (tf.isDirectory()) {
System.out.println("[" + name + "]");
show(tf);
}
}
}
2.3 注意事项
绝对路径:是一个完整的路径
以盘符名称开头的路径:(D:\\java培训课程\\02-Java语言进阶\\day08_File类、递归\\课件资料\\a.txt)
相对路径:是一个简化的路径
相对指的是相对于当前根目录(D:\\java培训课程\\02-Java语言进阶\\day08_File类、递归\\课件资料\\a.txt)
如果使用当前项目的根目录可以简化书写
D:\\java培训课程\\02-Java语言进阶\\day08_File类、递归\\课件资料\\a.txt-->可以简化为:a.txt
注意事项:
1.路径是不区分大小写的
2.路径的文件分隔符windows使用的是反斜杠,反斜杠是转义字符,两个放斜杠代表一个正常的反斜杠
String str = File.pathSeparator;
System.out.println(str); // ; 路径分隔符 windows:分号 linux:冒号
String str1 = File.separator;
System.out.println(str1); // \ 文件名称分隔符 windows:反斜杠\ linux:正斜杠/