Java I/O 13 - FileReader & FileWriter

  关于 java.io.FileReader java.io.FileWriter 的部分笔记,这两个类实现了对文件的字符级别的读写操作。FileReader和FileWriter中对于文件的读写操作方法全部来自于继承的父类中,自身仅包含了对于底层输入流的初始化方法。本文演示代码段的执行环境基于JDK版本1.7

概述

  FileReader和FileWriter用来完成关于文件字符流的读写操作。在读写文件时,采用的都是默认的字符街编码格式。而且,这两个类仅仅用来处理字符流的操作,若要采用字节流的处理方式,那么需要使用FileInputStream和FileOutputStream来完成操作。

  需要注意的是,FileWriter在打开文件时依赖于底层平台的特性,某些平台仅允许一个文件同时只能被一个FileWriter打开,所以如果当前某个文件已经被一个FileWriter打开,再次尝试通过一个新的FileWriter打开同一个文件时会打开失败且抛出异常。

继承关系

1
2
3
4
5
6
7
8
9
10
11
// FileReader
--java.lang.Object
--java.io.Reader
--java.io.InputStreamReader
--java.io.FileReader

// FileWriter
--java.lang.Object
--java.io.Writer
--java.io.OutputStreamWriter
--java.io.FileWriter

实现接口

类名 实现接口
FileReader Closeable, AutoCloseable,Readable
FileWriter Closeable, Flushable, AutoCloseable, Appendable

FileReader

Constructor Summary

public FileReader(String fileName)

1
2
3
public FileReader(String fileName) throws FileNotFoundException {
super(new FileInputStream(fileName));
}

  初始化一个文件字符输入流。参数是一个包含路径的文件名,首先通过文件名初始化一个文件字节输入流,然后在通过父类的构造方法完成底层输入流的初始化操作。FileReader中不包含任何字符流操作,所以FileReader中没有底层输入流的存在,底层输入流在其父类InputStreamReader中。

public FileReader(File file)

1
2
3
public FileReader(File file) throws FileNotFoundException {
super(new FileInputStream(file));
}

  初始化一个文件字符输入流。参数是一个文件对象,首先初始化一个文件字节输入流,然后在通过父类的构造方法完成底层输入流的初始化操作。

public FileReader(FileDescriptor fd)

1
2
3
public FileReader(FileDescriptor fd) {
super(new FileInputStream(fd));
}

  初始化一个文件字符输入流。参数是一个文件描述符对象,首先初始化一个文件字节输入流,然后在通过父类的构造方法完成底层输入流的初始化操作。

部分方法

来自于java.io.InputStreamReader的方法:

方法声明 备注
public void close() 实现父类Reader的抽象方法
public String getEncoding() InputStreamReader独有方法
public int read() 重写父类Reader的同名方法
public int read(char[] cbuf, int offset, int length) 实现父类Reader的抽象方法
public boolean ready() 重写父类Reader的同名方法

来自于java.io.Reader的方法:

FileWriter

Constructor Summary

public FileWriter(String fileName)

1
2
3
public FileWriter(String fileName) throws IOException {
super(new FileOutputStream(fileName));
}

  初始化一个文件字符输出流。参数是一个包含路径的文件名,首先通过文件名初始化一个文件字节输出流,然后在通过父类的构造方法完成底层输出流的初始化操作。FileWriter中不包含任何字符流操作,所以FileWriter中没有底层输入流的存在,底层输入流在其父类OutputStreamWriter中。

public FileWriter(String fileName, boolean append)

1
2
3
public FileWriter(String fileName, boolean append) throws IOException {
super(new FileOutputStream(fileName, append));
}

  初始化一个文件字符输出流。参数是一个包含路径的文件名,首先通过文件名初始化一个文件字节输出流,同时由参数append决定文件的写入方式是结尾追加写入还是从文件头部覆盖写入,然后在通过父类的构造方法完成底层输出流的初始化操作。

public FileWriter(File file)

1
2
3
public FileWriter(File file) throws IOException {
super(new FileOutputStream(file));
}

  初始化一个文件字符输出流。参数是一个文件对象,首先初始化一个文件字节输出流,然后在通过父类的构造方法完成底层输出流的初始化操作。

public FileWriter(File file, boolean append)

1
2
3
public FileWriter(File file, boolean append) throws IOException {
super(new FileOutputStream(file, append));
}

  初始化一个文件字符输出流。参数是一个文件对象,首先初始化一个文件字节输出流,同时由参数append决定文件的写入方式是结尾追加写入还是从文件头部覆盖写入,然后在通过父类的构造方法完成底层输出流的初始化操作。

public FileWriter(FileDescriptor fd)

1
2
3
public FileWriter(FileDescriptor fd) {
super(new FileOutputStream(fd));
}

  初始化一个文件字符输出流。参数是一个文件描述符,首先初始化一个文件字节输出流,然后在通过父类的构造方法完成底层输出流的初始化操作。

部分方法

来自于java.io.OutputStreamWriter的方法:

方法声明 备注
public void write(int c) 重写父类Writer的同名方法
public void write(char[] cbuf, int off, int len) 重写父类Writer的同名方法
public void write(String str, int off, int len) 重写父类Writer的同名方法
public String getEncoding() OutputStreamWriter独有方法
public void flush() 实现父类Writer的抽象方法
public void close() 实现父类Writer的抽象方法

来自于java.io.Writer的方法:

涉及基础知识点

  1. NIL

参考文献

  1. NIL




------------- End of this article, thanks! -------------


  版权声明:本文由Nathan R. Lee创作和发表,采用署名(BY)-非商业性使用(NC)-相同方式共享(SA)国际许可协议进行许可,转载请注明作者及出处。
  本文作者为 Nathan R. Lee
  本文标题为 Java I/O 13 - FileReader & FileWriter
  本文链接为 https://marcuseddie.github.io/2018/java-FileReader-FileWriter.html