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

541 阅读3分钟

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

上一篇文章我们讲的是Writer 类的相关概念以及Writer 抽象类中的一些常用方法。同时使用FileWriter 举例,我们可以看到,使用过程和之前的OutputStream 相关的类没有太大区别,唯一最大的区别就是一个是以字符为单位,一个是以字节为单位。

然而,虽然使用过程很相似,但是不同的类有不同的使用场景以及使用规范,同时它们包含自己的特性,以适应于不同的开发任务。这篇文章我们首先从Writer 的子类:FileWriter 讲起。

FileWriter 的概念

从类名就可以看出来,FileWriter 是文件字符输出流,它的应用场景就很明显了,就是将指定的字符写入到某个指定的文件(File)中去。通过FileWriter 的构造方法,和某个文件关联,传入某个文件相关的信息,比如说文件名,文件描述符等等,来实现写入文件的功能。

对于FileWriter 的内部实现,在写数据的时候,FileWriter 其实是维护了一个1024 个字符的数组。当要写数据的时候,FileWriter 会首先将数据先写入到它内部维护的这个字符数组中,然后如果我们需要把数据写到实际的存储硬盘上,我们需要调用flush 方法或者是close 方法来实现。当然,如果数据填满了内部的字符数组,它也会将数据写入到硬盘中。

在我们使用FileWriter 的时候,对于传入的文件参数,有可能文件不存在。但是如果目标文件不存在,那么系统会为其自动创建目标文件。

在使用FileWriter 的时候,如果目标文件已存在,那么默认情况会先将文件中已存在的数据清空,然后再将目标数据写入文件;当然我们往往不希望这么做,所以如果需要在原来数据后附加新的数据,我们应该使用这个构造函数:new FileWriter(File , boolean),第二参数应该传入true。

FileWriter 的方法

构造方法

// 传入File 文件,构造FileWriter 实例
FileWriter(File file)
// 功能同上,区别是append 参数传人true 是在原数据后追加数据
FileWriter(File file, boolean append)
// 根据文件描述符创建文件
FileWriter(FileDescriptor fd)
// 根据一个文件路径创建FileWriter 对象
FileWriter(String fileName)
// 根据上面的构造方法就可以推断出这个方法的作用
FileWriter(String fileName, boolean append)

以上是FileWriter 的构造方法。FileWriter 的其他相关方法这里就不做过多的介绍了,相关方法可以参考上一篇介绍Writer 类的文章中的内容。

使用举例

public static void writeTest1() throws IOException {
  FileWriter fileWriter = new FileWriter(new File("/abc/def/copy.txt"), true);
  String data = "test for FileWriter";
  fileWriter.write(data);fileWriter.flush();
  fileWriter.close();
}

这个例子理解起来也比较简单,就是向文件中写入某些字符数据。步骤如下:

  1. 首先通过构造方法,传入待处理的目标文件,同时设置写入模式为“追加”。
  2. 创建字符输出流。
  3. 声明要写入文件中的数据。
  4. 调用write 方法,将数据写入文件。
  5. 刷新字符流,然后关闭字符流。

总结

至此,关于FileWriter 类的相关介绍就介绍到这里。其实FileWriter 类看起来和FileOutputStream 也差不多,使用流程也很相似,但是还是那句话,不同的类有不同的特点,应该根据不同的使用场景,应用不同的类来完成相应的功能。存在都是有原因的,所以我们应该学习好每一个类的基本知识,等到使用到的时候不会说:“这个我没听过,我不知道是做什么的”,这样就不好了。

接下来的文章将继续介绍Writer 的其他子类。