使用带有 StandardCharsets 常量的 Files 读写器,而不是依赖平台默认字符集行为和字符集名称查找。
代码对比
✕ Platform-default charset
try (Reader reader = new FileReader(path.toFile())) {
return readAll(reader);
}
✓ Explicit standard charset
try (BufferedReader reader = Files.newBufferedReader(
path, StandardCharsets.UTF_8)) {
return readAll(reader);
}
发现此代码有问题? 告诉我们。
为什么现代方式更好
结果可移植
相同的字节在任何机器上都能被相同地解码。
预定义常量
StandardCharsets.UTF_8 不可能拼错字符集名称。
现代文件 API
Path、缓冲和编码在一次操作中表达。
旧方式
平台默认字符集
现代方式
显式标准字符集
自 JDK
7
难度
入门
JDK 支持
默认字符集文件 I/O 改为显式 StandardCharsets
可用
自 JDK 7 起广泛可用(2011 年 7 月)
工作原理
依赖默认字符集的 Reader 和 Writer 构造函数会使文件行为依赖于运行时环境。Files.newBufferedReader() 和 newBufferedWriter() 接受显式的 Charset,而 StandardCharsets 提供了如 UTF_8 这样有保证的常量,无需字符串查找或 UnsupportedCharsetException。
相关文档
证明