Skip to main content
Version: Next

文件读写

Java 提供了两代 IO API:传统的 java.io 和现代的 java.nio.file(NIO.2,Java 7+)。入门推荐直接使用 NIO.2 的 Files 工具类,简单可靠。

现代写法:Files 工具类​

import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;

Path path = Path.of("data.txt");

// 写入整个文件(覆盖)
Files.writeString(path, "Hello, Java!");

// 读取整个文件
String content = Files.readString(path);
System.out.println(content);

// 按行读取
List<String> lines = Files.readAllLines(path);
for (String line : lines) {
System.out.println(line);
}

// 追加内容(不覆盖)
Files.writeString(path, "\n新的一行",
java.nio.file.StandardOpenOption.APPEND);

常用辅助方法:

Files.exists(path); // 文件是否存在
Files.createFile(path); // 创建文件
Files.delete(path); // 删除文件
Files.copy(src, dest); // 复制
Files.move(src, dest); // 移动/重命名

传统写法:缓冲流​

大文件或需要逐行处理时,使用缓冲字符流:

import java.io.*;

// 读取
try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}

// 写入
try (BufferedWriter writer = new BufferedWriter(new FileWriter("out.txt", true))) {
writer.write("一行内容");
writer.newLine();
}

FileWriter 第二个参数为 true 表示追加模式。try-with-resources 会在结束时自动关闭流。

文件与目录信息​

import java.io.File;

File file = new File("data.txt");
file.exists(); // 是否存在
file.isFile(); // 是文件
file.isDirectory(); // 是目录
file.length(); // 文件大小(字节)
file.getName(); // 文件名
file.getAbsolutePath(); // 绝对路径

File dir = new File(".");
String[] names = dir.list(); // 列出目录下所有名称

选择建议​

  • 小文件整体读写 → Files.readString / Files.writeString,一行搞定
  • 大文件逐行处理 → BufferedReader / BufferedWriter
  • 二进制文件(图片、音视频)→ Files.readAllBytes 或字节流 FileInputStream