概述

在字符串缓冲区中收集输出的字符流,可用于构造字符串, 关闭流无效,关闭后调用其他方法不会报异常。

构造方法

构造方法

说明

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);
        }
    }
}