1、字节流可以进行任意文件类型的读取(文本文件,图片,音频,视频等),因为任意文件最终都是以字节存储在计算机中。但是,其实我们大多数的情况下,读取的都是纯纯的文本文件,那么以字节来读取显然效率不是那么的高,那么,此时如果以字符为单位来进行读取,效率会高很多,所以,就出现了字符流,接下来,我们就来学习字符流。
2、转换流:转换流是字节流到字符流之间的桥梁。转换流 = 字节流 + 编码集 ?
1)、构造方法:
方法名 | 说明 |
---|---|
InputStreamReader(InputStream in) | 使用默认字符编码创建InputStreamReader对象 |
InputStreamReader(InputStream in,String chatset) | 使用指定的字符编码创建InputStreamReader对象 |
OutputStreamWriter(OutputStream out) | 使用默认字符编码创建OutputStreamWriter对象 |
OutputStreamWriter(OutputStream out,String charset) | 使用指定的字符编码创建OutputStreamWriter对象 |
2)、案例:
// 1. 定义一个转换输入流
InputStreamReader reader =
new InputStreamReader(new FileInputStream("test\\听妈妈的话.txt"), "UTF-8");
// 每次读取一个字符
int read = reader.read();
System.out.println((char)read);
reader.close();
// 2. 定义一个转换输出流
OutputStreamWriter writer =
new OutputStreamWriter(new FileOutputStream("test\\听妈妈的话.txt", true), "UTF-8");
writer.write("\n");
writer.write('狠');
writer.close();
?3、字符输出流:FileWriter是转换流的子类,进行了更好的封装,使我们在操作字符文件的时候更加的方便,优雅
1)、构造方法:
方法名 | 说明 |
---|---|
public FileWriter(String fileName) | 指向具体的文件,覆写,使用系统默认的编码 |
public FileWriter(String fileName, boolean append) | 指向具体的文件,追加写,使用系统默认的编码 |
public FileWriter(File file) | 指向具体的文件,覆写,使用系统默认的编码 |
public FileWriter(File file, boolean append) | 指向具体的文件,追加写,使用系统默认的编码 |
2)、常用方法:
方法名 | 说明 |
---|---|
void write(int c) | 写一个字符 |
void write(char[] buf) | 写入一个字符数组 |
void write(char[] buf, int off, int len) | 写入字符数组的一部分 |
void write(String str) | 写一个字符串 |
void write(String str, int off, int len) | 写一个字符串的一部分 |
方法名 | 说明 |
---|---|
flush() | 刷新流,之后还可以继续写数据 |
close() | 关闭流,释放资源,但是在关闭之前会先刷新流。一旦关闭,就不能再写数据 |
3)、案例:
// 1. 创建字符输出流
FileWriter writer = new FileWriter("test\\听妈妈的话.txt");
// 写出单个字符
writer.write('我');
// 写出一个字符数组
char[] chs = {'爱', '你'};
writer.write(chs);
// 刷新流,将缓冲区的内容写出到文件
writer.flush();
// 写出一个字符串
writer.write("真真的");
writer.close();
?4、字符输入流:
1)、构造方法:
方法名 | 说明 |
---|---|
public FileReader(String fileName) | 指向具体的文件,使用系统默认的编码 |
public FileReader(File file) | 指向具体的文件,使用系统默认的编码 |
2)、常用方法:
方法名 | 说明 |
---|---|
int read() | 一次读一个字符数据 |
int read(char[] cbuf) | 一次读一个字符数组数据 |
3)、案例:
// 1. 定义一个字符输入流
FileReader reader = new FileReader("day16_io\\aa.txt");
// 每次读取一个字符
int read = reader.read();
System.out.println((char)read);
// 每次读取一个字符数组
char[] chs = new char[16];
int len = reader.read(chs);
String str = new String(chs, 0, len);
System.out.println(str);
// 2. 关闭资源
reader.close();
?本电子书目录:《Java基础的重点知识点全集》