419. 现代 Java IO 最佳实践 - 写入文本文件

文章目录

  • [419. 现代 Java IO 最佳实践 - 写入文本文件](#419. 现代 Java IO 最佳实践 - 写入文本文件)
    • [1. 📄 写入单个字符串](#1. 📄 写入单个字符串)
    • [2. 📑 写入多行文本](#2. 📑 写入多行文本)
    • [3. 🖨 使用 PrintWriter(格式化输出)](#3. 🖨 使用 PrintWriter(格式化输出))
      • [🔎 注意:](#🔎 注意:)
    • [4. 📝 使用 BufferedWriter(逐行写)](#4. 📝 使用 BufferedWriter(逐行写))
      • [✅ 特点:](#✅ 特点:)
    • [5. 🎓 总结](#5. 🎓 总结)
    • [🔥 课堂练习建议](#🔥 课堂练习建议)

419. 现代 Java IO 最佳实践 - 写入文本文件

在应用开发中,写入文本文件是一个非常常见的操作。现代 Java(尤其是 java.nio.file.Files API)已经把它简化到"一行代码"的程度。


1. 📄 写入单个字符串

如果我们要写入整个字符串,可以直接用:

java 复制代码
String content = "Hello Java I/O!";
Path path = Path.of("output.txt");

Files.writeString(path, content);

✅ 特点:

  • 一行搞定,非常简洁。
  • 会覆盖已有文件(默认行为)。

👉 如果想在文件末尾追加内容,可以指定选项:

java 复制代码
Files.writeString(path, "追加的一行\n", StandardOpenOption.APPEND);

2. 📑 写入多行文本

当我们有一个 行列表 时,可以直接写入:

java 复制代码
List<String> lines = List.of("第一行", "第二行", "第三行");
Files.write(Path.of("lines.txt"), lines);

效果就是每个元素写一行。


3. 🖨 使用 PrintWriter(格式化输出)

有时我们需要 格式化输出(例如 printf)。

java 复制代码
String name = "Alice";
int age = 29;

try (var writer = new PrintWriter(Path.of("person.txt").toFile())) {
    writer.printf(Locale.US, "Hello, %s, next year you'll be %d years old!%n", name, age + 1);
}

🔎 注意:

  • printf与 Locale(本地化)相关 的。
    • Locale.US 会用点号作为小数点。
    • Locale.GERMANY 会用逗号作为小数点。
  • 如果不想依赖 Locale,推荐使用:
    • Integer.toString()
    • Double.toString()
    • NumberFormat

👉 ⚠️ 奇怪的是,直到 Java 21,PrintWriter 还没有直接接受 Path 的构造方法 ,所以需要先 .toFile()


4. 📝 使用 BufferedWriter(逐行写)

如果不用 printf,可以用 BufferedWriter

java 复制代码
try (var writer = Files.newBufferedWriter(Path.of("buffered.txt"))) {
    writer.write("第一行");
    writer.newLine(); // 手动写入换行符
    writer.write("第二行");
}

✅ 特点:

  • 更灵活,可以逐行控制输出。
  • 写入时需要手动调用 newLine(),否则不会自动换行。
  • try-with-resources 会自动关闭 writer。

5. 🎓 总结

写法 适用场景 示例
Files.writeString 写入单个字符串 Files.writeString(path, content);
Files.write 写入多行 Files.write(path, lines);
PrintWriter.printf 格式化输出 writer.printf(Locale.US, "...", name, age);
BufferedWriter 灵活逐行写 writer.write(...); writer.newLine();

🔥 课堂练习建议

  1. 让学员写一个程序,把控制台输入的内容逐行写入文件(直到输入 "exit" 为止)。
  2. Files.writeString 实现一个简单的日志追加写入功能。
  3. 比较 printfNumberFormat 在不同 Locale 下的输出差异。
相关推荐
圆山猫5 小时前
[Virtualization](四):Linux KVM/RISC-V 的 vCPU 运行路径
java·linux·risc-v
笨鸟先飞,勤能补拙5 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
城管不管6 小时前
ReAct、Plan-and-Execute、Reflection 三大智能 Agent 范式核心区别
java·人工智能·算法·spring·ai·动态规划
IT小白杨6 小时前
从环境制备到自动化工作流:多账号运营的工程化架构拆解
java·经验分享·自动化·安全架构·指纹浏览器
长和信泰光伏储能6 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
豆瓣鸡6 小时前
算法日记 - Day3
java·开发语言·算法
浦信仿真大讲堂6 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
萧瑟余晖7 小时前
Java深入解析篇九之NIO详解
java·网络·nio
The Chosen One9857 小时前
高进度算法模板速记(待完善)
java·前端·算法
Gu Gu Study7 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python