writer.append方法可直接追加charsequence类型对象,支持链式调用,append(null)写入"null"字符串,三参数重载支持范围截取,需flush()或close()确保输出。

Writer.append 方法可以直接追加 CharSequence 类型的字符序列,无需手动转成字符串或数组。
append(CharSequence csq) 的基本用法
Java 的 Writer 类(如 StringWriter、FileWriter、BufferedWriter)都继承了 append(CharSequence) 方法。这个方法接收任意实现了 CharSequence 接口的对象,比如 String、StringBuilder、StringBuffer,甚至自定义实现类。
- 它内部会调用 csq.toString() 获取字符串内容(除非 csq 是 null,此时写入 "null" 字符串)
- 与 write(String) 不同,append 设计初衷就是支持流式链式调用(返回 this)
- 推荐优先使用 append 替代 write,语义更清晰,且兼容更多字符源
常见 CharSequence 类型的追加示例
以下代码在 StringWriter 中演示不同 CharSequence 的追加效果:
StringWriter writer = new StringWriter();
writer.append("Hello"); // String
writer.append(new StringBuilder(" World")); // StringBuilder
writer.append(new StringBuffer("!")); // StringBuffer
writer.append((CharSequence) null); // 写入 "null" 字符串
System.out.println(writer.toString()); // 输出:Hello World!null
注意:append(null) 不会抛空指针异常,而是写入字面量 "null" —— 这是 CharSequence 版本的明确行为。
带范围的 append(csq, start, end)
如果只想追加 CharSequence 的某一段,可用三参数重载方法:
- append(csq, start, end):从索引 start(含)到 end(不含)截取并写入
- 若 start 或 end > csq.length() 或 start > end,抛 IndexOutOfBoundsException
- 例如:append("Java", 1, 3) → 写入 "av"
链式调用与实际写入时机
append 方法返回当前 Writer 实例,支持链式调用:
StringWriter w = new StringWriter();
w.append("name: ").append(name).append(", age: ").append(age);
// 等价于多次 write(),但更简洁
⚠️ 注意:追加只是把数据放入缓冲区(如 BufferedWriter),最终要调用 flush() 或 close() 才真正输出;StringWriter 则直接累积在内存中,toString() 即可获取全部内容。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











