相关文章:
- 《IO流 (一) ----- 基本概念和File类》
- 《IO流 (二) ----- 文件流》
- 《IO流 (三) ----- 字符流和字符缓冲流》
- 《IO流 (四) ----- 转换流和标准字节输出流》
- 《IO流 (五) ----- 对象数据的序列化和反序列化》
本篇涉及内容
- 字符流FileReader和FileWriter详解
- 缓冲流BufferedReader详解
文件字符输入流FileReader和文件字符输出流FileWriter
一、优点与缺点
- 优点:读取、写入文本内容时更加方便快捷。
- 缺点:只能读取普通文本文件(注意不一定只是.txt文件,能用记事本编辑的文件都属于普通文本文件)。
二、常用方法
FileReader:
返回值 | 函数名与形参 | 功能 |
---|---|---|
int | read(char[] c) | 从文本中读取字符数组长度的字符到数组中,返回读取到的字符数量 |
FileWriter:
返回值 | 函数名与形参 | 功能 |
---|---|---|
void | write(char[] c) | 写入一个字符数组到文本中 |
void | write(char[] c, int off, int len) | 写入一个字符数组一部分到文本中 |
void | write(String str) | 写入一个字符串到文本中 |
void | write(String str, int off, int len) | 写入一个字符串的一部分到文本中 |
三、实现纯文本文件的拷贝
FileReader fr = null;
FileWriter fw = null;
try {
fr = new FileReader("src/StringStudy/FileReaderTest01.java");
fw = new FileWriter("Test/copiedTextFile.java");
char[] chars = new char[1024 * 512];// 一次拷贝1MB
int readCount = 0;
while((readCount = fr.read(chars)) != -1) {
fw.write(chars, 0, readCount);
}
fw.flush();
}
字符缓冲输入流BufferedReader
一、特点
本身带有缓冲区的字符流,使用该流可以不需要自定义char数组或byte数组。
二、构造方法
BufferedReader(Read reader)
——需要传入一个字符流Reader作为参数
注意:
- 当一个流的构造方法中需要传入一个流时,这个被传入的流叫做:节点流。
- 外部负责包装的这个流,叫做:包装流,或处理流。
- 对于下面这个程序来说FileReader就是节点流,BufferedReader就是包装流。
- 当存在节点流和包装流时,关闭流只需要关闭包装流即可自动关闭节点流。
三、常用方法
返回值 | 函数名和形参 | 功能 |
---|---|---|
String | readLine() | 读取一个文本行,当读取到末尾时返回null |
BufferedReader br = null;
try {
FileReader fr = new FileReader("src/StringStudy/BufferedReaderTest01.java");
br = new BufferedReader(fr);
String s = null;
// 每次循环读取一个文本行,读到文本末尾时跳出循环
while((s = br.readLine()) != null) {
System.out.println(s);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意:readLine()
方法不会读取每一行末尾的换行符\n