32、IO字符流
1、概述
以字符形式传输数据,其他与字节流相似
2、输入流Reader
Reader是字符输入流的最顶层父类,抽象类
方法:
int read();//读取单个字符并返回
int read(cahr[] cbuf);//一次读取多个字符,将字符读入数组
2.1、常用子类
FileReader类继承InputStream继承Reader类
文件字符输入流
构造
FileReader(String Filename);
FileReader(File file);
参数
读取文件的数据源
作用
- 创建一个FileReader对象
- 会把FileReader对象指向要读取的文件
使用步骤
- 创建Filereader对象,构造方法中绑定文件
- 使用Read方法读取文件
- 释放资源
3、输出流Writer
所有字符输出流的最顶层父类,抽象类
方法
abstract void close()
关闭此流,但要先刷新它。
abstract void flush()
刷新该流的缓冲。
void write(char[] cbuf)
写入字符数组。
abstract void write(char[] cbuf, int off, int len)
写入字符数组的某一部分。
void write(int c)
写入单个字符。
void write(String str)
写入字符串。
void write(String str, int off, int len)
写入字符串的某一部分。
3.1、常用子类
FileWriter继承OutputStream继承Write
文件字符输出流
作用:把内存中的字符数据写入文件
构造
FileWriter(File file)
//根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(String fileName)
//根据给定的文件名构造一个 FileWriter 对象。
参数
写入数据的目的地
构造的作用
- 回创建一个FileWriter对象
- 会根据构造传递的文件/路径,创建文件
- 会把FileWriter对象指向创建好的文件
使用步骤
- 创建对象,构造中传递目的地
- 使用write方法,把数据写入内存缓冲区(字符转字节)
- 使用flush方法,把内存缓冲区的数据刷新到文件中
- 释放资源
flush和close的区别
- flush刷新数据后还可以继续使用流对象
- close不可再次使用
4、使用try/catch处理流对象异常
正常使用try/catch处理需要在外面声明在try里面新建对象
FileWriter fw = null;
try{
代码
}catch(){
}finalle{
if(fw!=null){
try{
fw.close();
}catch(){
//处理
}
}
}
如果一开始创建对象失败,finally会空指针异常,所以加if判断
因为close有异常,所以要再次try/catch
在jdk7中,可以在try后面加一个(),里面定义流对象,这个流对象的作用域是try,执行完毕会自动释放,不用finally中写close
try(流对象){
语句
}catch(异常){
处理
}