stringwriter 是 java 中用于内存中字符拼接的高效 writer 实现,内部基于 stringbuilder 缓存内容,调用 tostring() 获取完整字符串,无需 close 且不抛 ioexception,适用于日志捕获、模板渲染等场景。

StringWriter 是 Java 中 java.io 包提供的一个字符输出流(Writer 子类),它的核心作用就是把所有写入的字符内容暂存在内存中的 StringBuilder(或早期版本用 StringBuffer)里,最终可通过 toString() 方法一次性获取完整字符串。
StringWriter 的基本原理
它内部封装了一个可变字符串容器(JDK 1.5+ 使用 StringBuilder),所有 write() 方法(如 write(int)、write(char[])、write(String))都只是追加到这个缓冲区中,不涉及磁盘或网络 I/O。因此它轻量、高效,适合临时拼接、日志捕获、模板渲染等场景。
常用写入方式
你可以像使用普通 Writer 一样向 StringWriter 写入内容:
- 直接写字符串:
writer.write("Hello") - 写字符数组:
writer.write(new char[]{'W', 'o', 'r', 'l', 'd'}) - 写单个字符:
writer.write('!') - 结合
PrintWriter封装(支持println):new PrintWriter(stringWriter)
获取结果字符串
调用 toString() 即可获得当前全部缓存内容:
注意:不需要 close(),也不会抛出 IOException;但调用 close() 也无副作用(只是标记为已关闭,后续写入会抛异常)。
例如:
StringWriter sw = new StringWriter();
sw.write("Java");
sw.write(" ");
sw.write("IO");
String result = sw.toString(); // 得到 "Java IO"
典型应用场景
- 将 XML/JSON 构建过程中的内容先收集再格式化输出
- 在单元测试中捕获
System.out或自定义 logger 的输出 - 替代字符串拼接,避免频繁创建 String 对象(尤其循环中)
- 与
TemplateEngine(如 FreeMarker、Thymeleaf)配合,把渲染结果写入 StringWriter
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











