File类
作用: java.io.File类: "文件"和"目录"的路径名的抽象表现形式, 主要用于文件和目录的创建, 查找和删除等操作
IO: Input输入 Output输出
关键字: file: 文件
directory: 目录
path: 路径
File类的静态成员变量
java.io.File类: 文件和目录的路径名的抽象表现形式, 主要用于文件和目录的创建, 查找和删除等操作
// 静态成员变量
static String pathSeparator: 路径分隔符的字符串形式
static char pathSeparatorChar: 路径分隔符的char形式
Windows系统是 分号;
Linux系统是 冒号:
static String separator: 文件名称分隔符的字符串形式
static char separatorChar: 文件名称分隔符的char形式
Window系统是 反斜杠\
Linux系统是 正斜杠/
绝对路径和相对路径
绝对路径:
以盘符开始的路径 如: "D:\\a\\hi.txt"
相对路径:
不以盘符开始的简化路径. IDEA项目, 相对于项目的根目录
如: "a\\1.mp3", "123.txt"
注意事项:
1. 路径不区分大小写 (在Windows系统中不区分大小写, Linux, Mac区分)
2. 路径一般写成字符串, 而字符串中一个\是转义, 所以要写两个\\
File类: 构造方法
// 构造方法(创建了File对象, 并将其指向该路径. 不会真正在磁盘上创建这个文件)
File File(String pathname): 根据 路径字符串 封装一个File对象
File File(String parent, String child): 根据 父路径字符串 和 子路径字符串 封装File对象
File File(File parent, String child): 根据 父路径的File对象 和 子路径 封装File对象
注意: 不存在的路径也可以创建File对象
创建File对象后, 并不会在磁盘上创建文件或目录!
路径是一个英文句点时,表示路径是项目根路径;
路径是两个英文句点时,表示是项目根路径的上一个路径
C:/Users/Administrator/AppData/Local/YNote/data/qq0160B4AE0B97BA596F0CCCA205A4CECF/28f9129ff3be4b96897b280b85ef4af8/%E6%8D%95%E8%8E%B7.png
File类: 获取方法
java.io.File类
// 常用获取方法
String getAbsolutePath(): 返回此File的绝对路径名字符串
String getPath(): 获取File对象的封装路径 (创建对象时传入的路径)
String getName(): 获取File对象的文件名或目录名 d:\a\b\c\aaa.txt
long length(): 获取File表示的"文件"大小的字节byte数 (不能获取目录的大小)
附注:
获取方法
getAbsolutePath()方法,不论输入的路径是绝对路径还是相对路径,返回的都是绝对路径
getPath()方法,输入的路径是啥路径,返回的就是什么路径,按原样返回
getName()方法,不论输入的是相对还是绝对路径,返回的都是截取路径的最后一段
length()方法,输入目录,没有长度值,会返回4096或0;输入文件名,返回文件的字节数
File类: 判断方法
java.io.File类
// 常用判断方法
boolean exists(): 判断File对象代表的文件或目录是否实际存在
boolean isDirectory(): 判断File表示的是否为目录
boolean isFile(): 判断File表示的是否为文件
附注
判断方法
exists()方法,判断输入的路径中末尾的文件或是目录是否真实存在
isDirectory()方法,判断输入的路径末尾一段是否是目录
isFile()方法,判断输入的路径末尾一段是否是文件
File类: 创建删除方法
java.io.File类
// 常用创建删除方法
boolean createNewFile(): 当文件不存在时, 创建一个新的空文件
false: 路径已经存在(无论文件还是目录)
抛IO异常: 写的路径不符合逻辑 (Y:\\a.txt\dsfsd)
boolean delete(): 删除由此File表示的文件或目录.
删除目录时: 必须是空目录
boolean mkdir(): 创建File表示的目录 "d:\\a\\b\\c\\我的目录"
false: 1. 路径已经存在(无论文件还是目录) 2. 写的路径不符合逻辑 (Y:\\a.txt\dsfsd)
boolean mkdirs(): 创建File表示的多级目录 "d:\\a\\b\\c\\我的目录"
false: 1. 路径已经存在(无论文件还是目录) 2. 写的路径不符合逻辑 (Y:\\a.txt\ds)
附注
创建删除
createNewFile()方法 只能创建文件,而且是单级文件,不看文件名如何,只看类型
创建文件的方法需要处理异常,调用创建文件方法在创建时,如果路径不存在会抛出IO异常
mkdir()方法,只能创建单级目录,不看名字,只看类型
mkdirs()方法,可创建单级或多级目录
delete()方法,可删除文件或目录,删除目录时需要层层删除,从里到外的删
File类: 遍历目录方法
java.io.File类
// 常用获取目录中内容的方法
String[] list(): 获取当前File目录下的所有子文件或目录的名字数组
File[] listFiles(): 获取当前File目录中的所有子文件或目录的File对象数组
注意:
只能用表示目录的File对象调用
用文件的File对象, 或者路径不存在, 调用会报错
附注
遍历目录
list()方法,查看目录里的子目录或是文件名称
listFiles()方法,可查看目录里的子目录和文件的完整路径和名称
两种方法都需要使用for循环遍历,便于查看结果,否则打印的是地址值
遍历可以获取隐藏文件或目录
C:/Users/Administrator/AppData/Local/YNote/data/qq0160B4AE0B97BA596F0CCCA205A4CECF/b3cefc39dfc344c4b59c3884d3039a6b/%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E9%81%8D%E5%8E%86.png
递归
递归思想:
遇到一个问题时, 将该问题拆解成可以解决的小问题, 如果解决不了, 继续拆解为更小的问题. 如果小问题解决了, 大问题也就能够解决(递归实现思路 -->将要解决的问题, 封装为方法)
Java中实现递归的方式:
方法内部调用方法自己 (所以必须定义方法)
递归的分类:
直接递归: 方法自己调用方法
间接递归: A方法调用B方法, B方法调用C方法, C方法调用A方法
递归时的注意事项:
1. 递归要有限定条件(出口), 保证递归能够停止(就是在某种情况下方法不再调用自己), 否则会栈内存溢出
2. 递归次数不能太多, 否则会栈内存溢出
3. 构造方法不能递归
递归的使用前提:
调用方法时, 方法的主体不变, 但每次传递的参数值不同, 可以使用递归
FileFilter文件过滤器的原理和使用
java.io.File类: Filter过滤器
File[] listFiles(FileFilter filter): 返回文件过滤器过滤后的File对象数组
File[] listFiles(FilenameFilter filter): 返回文件过滤器过滤后的File对象数组
java.io.FileFilter接口: 用于File对象的过滤器
boolean accept(File pathName): true则会将参数的File对象加入返回的File[], false则不加入
java.io.FilenameFilter接口: 将File对象拆分为父路径和子路径来判断的过滤器
boolean accept(File dir, String name): true则会将参数的File对象加入返回的File[], false则不加入
dir: 被找到的文件所在的目录 (父路径)
name: 文件的名称 (子路径)
例子:
需求:
使用File[] listFiles(FilenameFilter filter)方法和Lambda表达式, 将当前模块下的.java文件过滤打印出来
package demo04;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
/*需求:
使用File[] listFiles(FilenameFilter filter)方法和Lambda表达式, 将当前模块下的.java文件过滤打印出来*/
public class Test03 {
public static void main(String[] args) {
File dir = new File("com.itheima.day08");
getAllFile(dir);
}
public static void getAllFile(File dir){
/* File[] files = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isDirectory()||pathname.getName().toLowerCase().endsWith(".java");
}
});*/
// Lambda表达式标准
/* File[] files = dir.listFiles((File pathname) ->{
return pathname.isDirectory()||pathname.getName().toLowerCase().endsWith(".java");
}
);*/
// Lambda表达式优化
// File[] files = dir.listFiles(pathname->pathname.isDirectory()||pathname.getName().toLowerCase().endsWith(".java"));
/* File[] files = dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File(dir,name).isDirectory()||name.toLowerCase().endsWith(".java");
}
});*/
//Lambda标准
/*File[] files = dir.listFiles((File d, String name)-> {
return new File(d,name).isDirectory()||name.toLowerCase().endsWith(".java");
}
);*/
//Lambda表达式优化
File[] files = dir.listFiles((d,name)->new File(d,name).isDirectory()||name.toLowerCase().endsWith(".java"));
for (File file : files) {
if(file.isDirectory()){
getAllFile(file);
}else{
System.out.println(file);
}
}
}
}
|
|