Java 输入输出相关概念介绍(File、IO 流)(十五)(Writer)

285 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第15天,点击查看活动详情

之前的文章我们按照顺序介绍了InputStream / OutputStream / Reader 的相关概念及对应的常用实现类,上一篇文章是介绍Reader 相关的最后一篇文章,从这篇文章开始,我们开始介绍IO 流的最后一个抽象类:Writer。

Writer 的基本概念

Writer 类本身也是抽象类,是IO 流中所有Writer 的相关子类。通过下面图片可以看到各个类的继承关系。

image.png

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

这个例子也很简单,过程也很明显,主要分为四步:

  1. 第一行,使用File 类找到一个文件
  2. 第二行,通过子类实例化父类对象
  3. 第三行,准备一个字符串
  4. 第四行,将内容输出,保存文件
  5. 第五行,关闭输出流

总结

这篇文章就是介绍Writer 的相关概念及一些主要的方法。后续的文章会围绕Writer 展开,介绍Writer 的相关子类实现的概念和主要方法。具体的实现子类可参考之后的文章。