概述
在字符串缓冲区中收集输出的字符流,可用于构造字符串, 关闭流无效,关闭后调用其他方法不会报异常。
构造方法
构造方法 | 说明 |
---|---|
public StringWriter() |
使用默认的初始字符串缓冲区大小创建一个新的字符串Writer,默认大小为16个字符。 |
public StringWriter(int initialSize) |
使用指定的大小创建一个新的字符串Writer。 |
常用方法
实例方法 | 说明 |
---|---|
void write(int c) |
向流中写入单个字符。 |
void write(char cbuf[]) |
向流中写入字符数组。 |
void write(String str) |
向流中写入字符串。实际上是调用append() 方法写入。 |
void write(String str, int off, int len) |
向流中写入指定字符串的一部分,从字符串的off索引位置开始,写入len个字符。 |
void write(char cbuf[], int off, int len) |
向流中写入指定字符数组中的一部分,从字符数组中的下标off开始,写入len个字符。 |
StringWriter append(char c) |
将指定字符附加到此StringWriter中。 |
StringBuffer getBuffer() |
返回字符串缓冲区。 |
String toString() |
以字符串形式返回缓冲区的当前值。 |
void close() |
闭流,但无效,关闭后仍然可以调用流的方法。 |
实例
public class Test {
public static void main(String[] args) throws IOException {
// 创建StringWriter实例对象
StringWriter sw = new StringWriter();
StringWriter sw2 = new StringWriter(5);// 实际上是创建一个指定initialSize长度的字符数组
// write()方法,将字符串或字符数组写入到流中
sw.write('c');// 写入一个字符char
sw.write("Hello".toCharArray());// 写入一个字符数组char[]
sw.write("Hello World!");// 写入一个字符串String
sw.write("Hello World!", 2, 4);// 写入一个字符串String,从字符串的off索引位置开始,写入len个字符
sw.write("Hello World!".toCharArray(), 0, 5);// 写入一个字符数组char[],从字符数组中的下标off开始,写入len个字符
// append()方法
sw.append('X');// 向流中添加一个字符
// toString()方法,将流对象中的数据以字符串的形式输出
System.out.println(sw.toString());
// getBuffer()方法,返回流的字符缓冲对象StringBuffer
StringBuffer buffer = sw.getBuffer();
// close()方法,关闭流,但无效,关闭后仍然可以调用流的方法
sw.close();
sw.write('中');
System.out.println(sw.toString());
}
}
/*打印结果:
cHelloHello World!llo HelloX
cHelloHello World!llo HelloX中
*/
使用
实际开发中,这个类使用较少。但也有合适的应用场景,例如当我们想要写入一个字符串,但是API要求必须是Writer或Stream,那么我们就可以使用StringWriter,来将字符串传递进去。例如:
public void process(Person person, Writer writer);
例如我们就可以将堆栈跟踪返回为字符串,然后做相关的处理。
public class Demo {
public static void main(String[] args) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = format.parse("202106-14");
} catch (ParseException e) {
// e.printStackTrace();
// 创建一个StringWriter
StringWriter sw = new StringWriter();
// 使用此StringWriter创建PrintWriter
PrintWriter pw = new PrintWriter(sw);
// 将堆栈跟踪信息打印到StringWriter中
e.printStackTrace(pw);
// 将堆栈跟踪信息作为字符串
String exceptionMessage = sw.toString();
System.out.println("打印的异常信息:" + exceptionMessage);
}
}
}