write(String, off, len) 是 FileWriter 中精准写入字符串子片段的方法,参数 str 为源字符串,off 为起始索引(≥0 且 < str.length()),len 为写入长度(≥0 且 off+len≤str.length()),越界抛 StringIndexOutOfBoundsException。

write(String, off, len) 是 FileWriter 中用于写入字符串指定片段的核心方法,它不覆盖整串内容,而是精准控制从哪开始、写多少个字符。
参数含义要记清
这个重载方法接收三个参数:
- String str:待写入的原始字符串
- int off:起始索引(从 0 开始计数,不能为负,也不能 ≥ str.length())
- int len:要写入的字符个数(必须 ≥ 0,且 off + len ≤ str.length(),否则抛出 StringIndexOutOfBoundsException)
典型使用场景
适合需要截取部分内容写入文件的情况,比如日志截断、协议字段提取、分段写入大文本等。
- 写入“HelloWorld”中的 “World” →
write("HelloWorld", 5, 5) - 跳过前两个字符,写入“Java编程很有趣”中后 6 个字 →
write("Java编程很有趣", 2, 6)(结果是“编程很有趣”) - 只取首字母 →
write("Apple", 0, 1)写入 "A"
注意事项
该方法底层会把子串转成 char 数组再写入,不自动换行、不添加空格,也不做编码转换(依赖系统默认字符集)。
立即学习“Java免费学习笔记(深入)”;
- 如果 off 或 len 越界,运行时直接报错,建议写前校验:
if (off >= 0 && len >= 0 && off + len - 中文字符算作一个 char(UTF-16 编码下),所以长度计算与汉字个数一致,无需额外处理
- 它不会自动 flush,写完后需手动调用
flush()或close()才能确保内容真正落盘
对比其他 write 方法更省资源
相比先用 substring() 创建新字符串再调 write(String),write(str, off, len) 避免了临时字符串对象的创建,内存开销小,尤其适合高频或大数据量写入场景。


















