文件和目录操作
掌握 File 类的文件目录操作
掌握 Files 工具类的常用方法
能实现目录遍历、批量处理等场景
核心讲解
(1)File 类
代表文件或目录的路径对象,可以操作文件和目录。
创建文件:
createNewFile()创建目录:
mkdir()、mkdirs()多级删除:
delete()判断:
exists()、isFile()、isDirectory()获取信息:
getName()、getAbsolutePath()、length()、lastModified()列出子文件:
list()、listFiles()
(2)Files 工具类(Java 7+ NIO)
更强大的文件工具类,静态方法。
读文件:
Files.readAllLines()、Files.readAllBytes()写文件:
Files.write()复制:
Files.copy()移动:
Files.move()创建目录:
Files.createDirectories()遍历目录:
Files.walk()
(3)递归遍历目录
递归遍历所有子目录和文件,批量处理文件的核心方法。
代码示例
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
public class FileOpDemo {
public static void main(String[] args) throws IOException {
// ===== File类操作 =====
File dir = new File("testDir");
// 创建多级目录
dir.mkdirs();
File file = new File(dir, "test.txt");
file.createNewFile();
System.out.println("是否存在:" + file.exists());
System.out.println("是文件吗:" + file.isFile());
System.out.println("绝对路径:" + file.getAbsolutePath());
System.out.println("文件大小:" + file.length() + "字节");
// 列出目录下的文件
File[] files = dir.listFiles();
for (File f : files) {
System.out.println(f.getName());
}
// ===== Files工具类 =====
// 写文件
Files.write(Paths.get("test.txt"), "Hello NIO".getBytes());
// 读所有行
List<String> lines = Files.readAllLines(Paths.get("test.txt"));
System.out.println("文件内容:" + lines);
// 复制文件
Files.copy(Paths.get("test.txt"), Paths.get("copy.txt"));
// ===== 递归遍历目录 =====
System.out.println("\n遍历目录:");
listFiles(new File("."));
}
// 递归遍历所有文件
public static void listFiles(File dir) {
File[] files = dir.listFiles();
if (files == null) return;
for (File f : files) {
if (f.isDirectory()) {
System.out.println("目录:" + f.getName());
listFiles(f); // 递归
} else {
System.out.println(" 文件:" + f.getName());
}
}
}
}
常见误区
mkdirs 和 mkdir 搞混:mkdir 只能建一级,mkdirs 才能建多级,推荐用 mkdirs
delete 删除目录非空:delete 只能删空目录和单个文件,非空目录删不了,要递归删
路径用相对路径:相对路径是相对于工作目录,不是文件所在目录
不关闭流:旧版 IO 要关流,Files 工具类不用,内部自动关
课后练习
在指定目录下创建多级文件夹
遍历指定目录,找出所有的.java 文件
实现一个文件夹的复制功能
对比 File 类和 Files 工具类的优缺点
