操作文件在 Java 里几乎绕不开——读配置文件、记日志、导出数据报表,或者只是处理上传的附件。这些活都需要熟练创建、读取、写入和删除文件。下面按实际开发中最常见的几个场景来介绍,从传统 IO 到 NIO.2,把关键用法和容易踩的坑串一遍。
Java 提供了两套主要的文件操作 API:传统 IO(java.io.File 和 FileReader/Writer 等)和 NIO.2(java.nio.file 包下的 Paths、Files)。简单对比一下:
| 体系 | 核心类 | 特点 | 适合场景 |
|---|---|---|---|
| 传统 IO | java.io.File、FileReader、FileWriter | 兼容旧代码,API 偏底层 | 维护老项目、简单文件操作 |
| NIO.2 | java.nio.file.Paths、Files | API 更简洁,功能更强,支持批量操作和文件属性管理 | 新项目优先考虑 |
这篇文章以 NIO.2 为主,但也会带上传统 IO 的写法,毕竟很多老项目还在用。
基础操作
创建、删除和判断文件是基本功,后面读写都依赖这些。下面这段代码同时演示了传统 IO 和 NIO.2 的方式,实际开发中挑一种用就行。
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class FileBasicOperations {
public static void main(String[] args) {
// 传统 IO 方式
File file = new File("test.txt");
try {
if (file.createNewFile()) {
System.out.println("文件创建成功:" + file.getAbsolutePath());
} else {
System.out.println("文件已存在");
}
System.out.println("是文件吗:" + file.isFile());
System.out.println("是目录吗:" + file.isDirectory());
// 创建目录,mkdirs 可以自动创建不存在的父目录
();
(dir.mkdirs()) {
System.out.println( + dir.getAbsolutePath());
}
(file.delete()) {
System.out.println();
}
} (Exception e) {
e.printStackTrace();
}
Paths.get();
{
(!Files.exists(path)) {
Files.createFile(path);
System.out.println( + path.toAbsolutePath());
}
Paths.get();
(!Files.exists(dirPath)) {
Files.createDirectories(dirPath);
System.out.println();
}
(Files.exists(path)) {
Files.delete(path);
System.out.println();
}
} (Exception e) {
e.printStackTrace();
}
}
}

