Java中Files类读写文件需按场景选方法:小文本用readAllLines/write或readString/writeString;写前须创建父目录并处理文件占用;大文件禁用一次性方法,应使用Stream或BufferedWriter。

Java 中用 Files 类快速读写文件,核心是选对方法、避开常见陷阱。它不是“万能一键操作”,而是要根据文件大小、编码、是否追加、目录是否存在等实际条件做适配。
小文本文件:用 readAllLines() 和 write() 最省事
适合配置文件、JSON 模板、日志快照等几 KB 到几 MB 的静态内容。
-
读取全部行:直接得到
List<String>,默认 UTF-8 编码List<String> lines = Files.readAllLines(Paths.get("config.json")); -
指定编码读取(比如 GBK 文件):
Files.readAllLines(path, StandardCharsets.GBK) -
写入多行文本(默认覆盖):
Files.write(path, Arrays.asList("host=localhost", "port=8080"), StandardCharsets.UTF_8); -
追加写入需显式加选项:
Files.write(path, List.of("new line"), StandardCharsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.APPEND);
单行或纯文本内容:用 readString() 和 writeString() 更简洁
Java 11+ 引入,比 readAllBytes() + 手动转字符串更直观,也比 readAllLines() 少一层 List 包装。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
读整个文件为字符串(自动按 UTF-8 解码):
String content = Files.readString(Paths.get("README.md")); -
写字符串到文件(同样默认 UTF-8):
Files.writeString(Paths.get("output.txt"), "Hello NIO!"); - 注意:它们内部仍是一次性加载全部内容,不适用于大文件。
写文件前必须处理的两件事
很多人一写就报 NoSuchFileException,其实就卡在这两个地方:
立即学习“Java免费学习笔记(深入)”;
-
父目录可能不存在:
Files.write()不会自动创建路径中缺失的目录。
写之前加一句:Files.createDirectories(path.getParent()); -
目标文件被占用(尤其 Windows):
若记事本、IDE 正在打开该文件,会抛AccessDeniedException,不是普通IOException,记得单独捕获。
大文件坚决不用这些“一次性”方法
readAllBytes()、readAllLines()、write() 处理几百 MB 文件极易触发 OutOfMemoryError。
- 替代方案:用
Files.lines(path)得到Stream<String>,配合try-with-resources或手动close(); - 写大文本:用
Files.newBufferedWriter(path)获取BufferedWriter,调write()+newLine()逐段写入; - 它们都支持自动资源释放,且内存占用可控。

















