一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第15天,点击查看活动详情。
之前的文章我们按照顺序介绍了InputStream / OutputStream / Reader 的相关概念及对应的常用实现类,上一篇文章是介绍Reader 相关的最后一篇文章,从这篇文章开始,我们开始介绍IO 流的最后一个抽象类:Writer。
Writer 的基本概念
Writer 类本身也是抽象类,是IO 流中所有Writer 的相关子类。通过下面图片可以看到各个类的继承关系。
Writer 常常和Reader 配合,是以字符为单位的输出流、输入流。
Writer 常用的实现子类有CharArrayWriter / BufferedWriter / FileWriter / OutputStreamWriter 这些。不同的子类有各自不同的适合的应用场景,各个子类的相关内容我们将在之后的文章中所介绍。
在下文我们主要讲解一下Writer 类的相关常用的方法,包括构造方法及一些通用方法。同时使用FileWriter 为例来说明Writer 的使用。
Writer 的相关方法
构造方法
// 创建字符输出流
protected Writer()
// 创建字符输出流,并传入一个用于同步的对象
protected Writer(Object lock)
开发中常用以实现业务逻辑的方法
// 添加字符到writer 实例
Writer append(char c)
// 添加字符序列到writer 实例
Writer append(CharSequence csq)
// 将指定字符序列的子序列添加到此
Writer append(CharSequence csq, int start, int end)
// 先flush 操作,然后关闭流
// 注意,流被关闭后,后续如果再操作write 或flush 都会有IOExcepiton 异常抛出
abstract void close()
// 刷新流的缓冲
abstract void flush()
// 将内容写入参数的字符数组
void write(char[] cbuf)
// 将内容按照方法参数,写入字符数组的一部分
abstract void write(char[] cbuf, int off, int len)
// 和append 方法效果一样,写入单个字符,就是参数类型不同
void write(int c)
// 作用同上,但是参数是字符串
void write(String str)
// 按照参数,将字符串的某一部分写入
void write(String str, int off, int len)
使用举例
public static void main(String args[]) throws Exception {
File f = new File("/abc/def/copy.txt");
Writer out = new FileWriter(f);
String str = "1234567890";
out.write(str);
out.close();
}
这个例子也很简单,过程也很明显,主要分为四步:
- 第一行,使用File 类找到一个文件
- 第二行,通过子类实例化父类对象
- 第三行,准备一个字符串
- 第四行,将内容输出,保存文件
- 第五行,关闭输出流
总结
这篇文章就是介绍Writer 的相关概念及一些主要的方法。后续的文章会围绕Writer 展开,介绍Writer 的相关子类实现的概念和主要方法。具体的实现子类可参考之后的文章。