java 11 的 files.readstring 和 files.writestring 提供简洁的 utf-8 文本文件读写功能,一行代码完成操作,适用于小文件;不支持大文件、原子写入或精细控制,需手动处理异常和目录创建。

Java 11 引入了 Files.readString 和 Files.writeString,专为简单读写小文本文件设计,省去流操作和编码手动处理的繁琐步骤。它们默认使用 UTF-8 编码,代码简洁、语义清晰。
直接读取文本内容(Files.readString)
只需一行代码即可将整个文件内容读为字符串,适用于配置文件、日志片段、JSON 小文件等场景。
- 自动按 UTF-8 解码,无需显式指定 Charset(如需其他编码,可传入第二个参数
StandardCharsets.ISO_8859_1等) - 文件不存在或不可读时抛出
IOException,建议用 try-catch 包裹 - 不适用于超大文件(比如几百 MB),会一次性加载全部内容到内存
直接写入文本内容(Files.writeString)
把字符串写入文件同样只需一行,支持覆盖写入或追加写入两种模式。
- 默认覆盖原文件;若要追加,传入
StandardOpenOption.APPEND - 同样默认 UTF-8 编码;如需指定编码,可加
Charset参数 - 目标目录不存在时会抛出
NoSuchFileException,需提前确保父目录存在(可用Files.createDirectories创建)
实用示例:读写配置值
比如保存用户偏好到 config.txt:
// 写入Files.writeString(Paths.get("config.txt"), "theme=dark
lang=zh");
// 读取并解析
String content = Files.readString(Paths.get("config.txt"));<br>
Map<string string> props = Arrays.stream(content.split("\n"))<br>
.map(line -> line.split("=", 2))<br>
.filter(kv -> kv.length == 2)<br>
.collect(Collectors.toMap(kv -> kv[0].trim(), kv -> kv[1].trim()));</string>
注意事项与替代选择
这两个方法适合“小文本+简单场景”。如果需要更精细控制(如逐行处理、进度反馈、异常分类处理),仍应使用 Files.lines() 或传统 BufferedReader/Writer。
另外,它们不支持原子写入(如先写临时文件再重命名),涉及数据一致性要求高的场景需自行封装。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











