文章目录
1 绝对路径与相对路径
1.1 了解路径
- 绝对路径:完整路径,如果是Windows,则以盘符开始。
- 相对路径:指的是相对于当前项目根目录的路径。
路径使用时,不区分大小写。由于路径是字符串,对于反斜杠需要进行转义,因此表示反斜杠通过“\‘表示。
1.2 路径分割符
在不同操作系统中,路径分隔符以及目录分割符是不一样的。
// 路径分隔符 windows:; linux::
System.out.println(File.pathSeparator);
// 目录分隔符 windows:\ linux:/
System.out.println(File.separator);
2 File类
java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
2.1 构造器
通过给定的路径字符串转换为抽象路径名称,创建一个File对象。创建File对象,只是把路径封装到File对象中,并不会校验路径是否正确。路径可以是文件,也可以是目录;可以是相对路径,也可以是绝对路径。
public File(String pathname)
:通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。public File(String parent, String child)
:从父路径名字符串和子路径名字符串创建新的 File实例。public File(File parent, String child)
:从父抽象路径名和子路径名字符串创建新的 File实例。
2.2 获取功能的方法
public String getAbsolutePath()
:返回此File的绝对路径名字符串。public String getPath()
:将此File转换为路径名字符串。public String getName()
:返回由此File表示的文件或目录的名称。public long length()
:返回由此File表示的文件的长度。
2.3 判断功能的方法
public boolean exists()
:此File表示的文件或目录是否实际存在。public boolean isDirectory()
:此File表示的是否为目录。public boolean isFile()
:此File表示的是否为文件。
2.4 创建删除功能的方法
public boolean createNewFile()
:当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。public boolean delete()
:删除由此File表示的文件或目录。public boolean mkdir()
:创建由此File表示的目录。public boolean mkdirs()
:创建由此File表示的目录,包括任何必需但不存在的父目录。
2.5 目录的遍历
public String[] list()
:返回一个String数组,表示该File目录中的所有子文件或目录。public File[] listFiles()
:返回一个File数组,表示该File目录中的所有的子文件或目录。
3 案例:递归打印目录下所有文件路径名
不采用过滤器
public static void printDir(File dir) {
File[] files = dir.listFiles();
if (files != null) {
for (File file : files) {
if (file.isFile()) {
if (file.getName().endsWith(".java")) {
System.out.println(file.getAbsolutePath());
}
} else {
printDir(file);
}
}
}
}
使用过滤器
使用过滤器对当前路径下文件进行筛选,在遍历过程中,省掉一层if判断。
public static void printDirFilter(File dir) {
File[] files = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getName().endsWith(".java") || pathname.isDirectory();
}
});
if (files != null) {
for (File file : files) {
if (file.isFile()) {
System.out.println(file.getAbsolutePath());
} else {
printDirFilter(file);
}
}
}
}
使用lambda表达式
由于FileFilter接口,仅有一个接口,比较方便使用lambda表达式,得到更加简洁的代码。
File[] files = dir.listFiles(file ->
file.getName().endsWith(".java") || file.isDirectory()
);