JavaSE🔟文件(File)
File:用于代表磁盘中的一个文件或文件夹(未必真实存在),
提供操作文件本身的方法。
1、常用属性
-
路径分隔符:
;
pathSeparator
- ``pathSeparatorChar`
-
名称分隔符:
\
Separator
SeparatorChar
-
抽象路径:
path
,即创建文件时指定的路径.// 抽象路径为myFile.txt File file1 = new File("myFile.txt"); // 抽象路径为F:\myFile.txt File file2 = new File("F:\\myFile.txt");
2、常用方法
2.1、创建、删除
Hint:创建的 File 实例仅在中存在,磁盘中未必真实存在对应的文件。
- 创建文件:
createNewFile()
,当指定路径的文件不存在时创建。 - 创建文件夹:
mkdir()
:单级目录mkdirs()
:级联创建多级目录
- 删除文件(目录):若为多级目录则只删除最内层目录,当目录为空时才删除。
delete()
:直接删除deleteOnExit
:虚拟机终止时删除
2.2、文件信息
- 路径:
getPath()
:抽象路径getAbsolutePath
:绝对路径
- 目录:
getName()
:文件(目录)名getParent()
:文件所在目录(父级目录)
- 其它:
getLenth()
:文件长度lastModified()
:文件最后修改时间
2.3、判断
- 类型:
isFile()
:是否为文件isDirectory
:是否为目录
- 存在性:
exists()
- 隐藏性:
isHidden()
3、目录操作
3.1、列出内容
3.1.1、所有内容
相关方法
list() | listFiles() | |
---|---|---|
含义 | 列出目录中所有文件和子目录的文件名 | 列出目录中所有文件和子目录的 File 对象 |
返回值 | 字符串数组 | 文件数组 |
3.1.2、文件过滤器
自定义文件筛选规则
-
FileNameFilter(Java 1.0)
- dir:使用该过滤器的目录对象
- name:目录中的文件名(目录名)
-
FileFilter(Java 1.0)
-
pathname:文件夹中的文件(目录)
@FunctionalInterface public interface FilenameFilter { boolean accept(File dir, String name); } @FunctionalInterface public interface FileFilter { boolean accept(File c); }
-
示例:列出 dir 目录中的
.jpg
后缀文件名。
File dir = new File("目录路径");
// lambda表达式
File[] files = dir.listFiles((pathName) -> pathName.getName().endsWith(".jpg"));
for (File file : files) {
System.out.println(file);
}
3.2、递归
多叉树的遍历
- 判断是文件夹则递归调用。
- 否则执行相应操作。
3.2.1、递归遍历
public void recursiveList(File dir) {
// 当前目录路径
System.out.println(dir.getAbsoluteFile());
File[] files = dir.listFiles();
if (files != null && files.length > 0) {
// 遍历
for (File file : files) {
if (file.isDirectory()) {
recursiveList(file); // 递归
} else {
System.out.println(file.getAbsolutePath());
}
}
}
}
3.2.2、递归删除
后序遍历:
- 递归删除子文件夹内容
- 删除子文件夹本身
public void recursiveDelete(File dir) {
// 当前目录路径
System.out.println("===== " + dir.getAbsoluteFile() + " =====");
File[] files = dir.listFiles();
if (files != null && files.length > 0) {
// 遍历
for (File file : files) {
if (file.isDirectory()) {
recursiveDelete(file); // 递归
file.delete(); // 后序位置:删除子文件夹本身
} else {
System.out.println(file.getAbsolutePath() + " was deleted? " + file.delete());
}
}
}
}