JDK 7 引入的 java.nio.file.Files API 讓文件操作變得極其簡潔。本文展示如何用一行核心代碼完成字符串寫入文件,並解析其底層機制與常用變體。
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
public class StringToFile {
public static void main(String[] args) throws IOException {
String msg = "Hello, NIO!";
// 一行搞定:路徑、字節數據、默認選項(創建、截斷、寫入)
Files.write(Paths.get("./duke.txt"), msg.getBytes());
}
}
public static Path write(Path path, byte[] bytes, OpenOption... options)
CREATE_NEW:文件不存在則創建TRUNCATE_EXISTING:文件存在則清空重寫WRITE:打開寫入模式| 需求 | 代碼 | 說明 |
|---|---|---|
| 追加寫入 | Files.write(path, bytes, StandardOpenOption.APPEND) |
文件末尾追加,不截斷 |
| 指定編碼寫入字符串 | Files.writeString(path, str, StandardCharsets.UTF_8) |
JDK 11+,無需手動 getBytes() |
| 寫入多行 | Files.write(path, lines, StandardCharsets.UTF_8) |
lines 為 Iterable<String> |
| 大文件流式寫入 | Files.newBufferedWriter(path).write(...) |
避免一次性載入內存 |
臨時文件寫入 → 重命名替換,保證寫入原子性(要麼全寫成功,要麼原文件完好)。
Path temp = Files.createTempFile("prefix", ".tmp");
Files.write(temp, data); // 寫臨時文件
Files.move(temp, targetPath, StandardCopyOption.ATOMIC_MOVE); // 原子替換
// 老式 FileWriter(需 try-with-resources 關閉流)
try (FileWriter fw = new FileWriter("duke.txt")) {
fw.write(msg);
}
// NIO Files.write 內部已處理資源關閉、異常安全,代碼更健壯
Files.write 是現代 Java 文件寫入的首選:簡潔、安全、功能豐富。配合 writeString(JDK 11+)更是字符串處理的利器。