▶ 字符输入流(Reader)
✔ java.io.Reader :字符输入流,是字符输入流的最顶层的父类,定义了一些共性的成员方法,是一个抽象类
共性的成员方法:
--- int read() :读取单个字符并返回
--- int read(char[ ] cbuf ) :一次读取多个字符,将字符读入数组
--- void close() :关闭该流并释放与之关联的所有资源
✔ java.io.FileReader extends InputStreamReader extends Reader
FileReader :文件字符输入流 --- 作用是把硬盘文件中的数据以字符的方式读取到内存中
构造方法:
--- FileReader( String fillname )
--- FileReader( File file )
参数:读取文件的数据源
String filename :文件的路径
File file :一个文件
FileReader构造方法的作用:
(1)创建一个 FileReader 对象
(2)会把 FileReader 对象指向要读取的文件
✔ 字符输入流的使用步骤
(1)创建 FileReader 对象,构造方法中绑定要读取的数据源
(2)使用 FileReader 对象中的方法read读取文件
(3)释放资源
编辑
String类的构造方法:
--- String( char[ ] value ) :把字符数组转换为字符串
--- String( char[ ] value,int offset,int count ) :把字符数组的一部分转换为字符串,offset是数组的开始索引,count是转换的个数
编辑
▶ 字符输出流(Writer)
✔ java.io.Writer :字符输出流,是所有字符输出流的最顶层的父类,是一个抽象类
共性成员方法:
--- void write( int c ) :写入单个字符
--- void write( char[ ] cbuf ) :写入字符数组
--- abstract void write( char[ ] cbuf,int off,int len ) :写入字符数组的某一部分,off是数组的开始索引,len是写的字符的个数
--- void write( String str ) :写入字符串
--- void write( String str,int off,int len ) :写入字符串的某一部分,off是字符串的开始索引,len是写的字符个数
--- void flush() :刷新该流的缓冲
--- void close() :关闭此流,但要先刷新它
✔ java.io.FileWriter extends OutputStream extends Writer
FileWriter :文件字符输出流 --- 作用是把内存中的字符数据写入到文件中
构造方法:
--- FileWriter( File file ) :根据给定的File对象构造一个 FileWriter 对象
--- FileWriter( String filename ) :根据给定的文件名构造一个 FileWriter 对象
参数:写入数据的目的地
String filename --- 文件路径
File file --- 是一个文件
构造方法的作用:
(1)创建一个 FileWriter 对象
(2)根据构造方法中传递的文件 / 文件的路径,创建文件
(3)把 FileWriter 对象指向创建好的文件
✔ 字符输出流的使用步骤!!!
(1)创建 FileWriter 对象,构造方法中绑定要写入数据的目的地
(2)使用 FileWriter 中的方法 write,把数据写入到内存缓冲区中(字符转换为字节的过程)
(3)使用 FileWriter 中的方法flush,把内存缓冲区中的数据刷新到文件中
(4)释放资源(会先把内存缓冲区中的数据刷新到文件中)
编辑
✔ flush方法和close方法的区别
flush :刷新缓冲区,流对象可以继续使用
close :先刷新缓冲区,然后通知系统释放资源,流对象不可以再被使用了
编辑
✔ 字符输出流写数据的其他方法
编辑
输出:
编辑
✔ 字符输出流的续写和换行
续写 / 追加写:使用两个参数的构造方法
--- FileWriter( String filename ,boolean append )
--- FileWriter( File file ,boolean append )
参数:
String filename 、File file --- 写入数据的目的地
boolean append --- 续写开关,true则不会创建新的文件覆盖原文件,可以续写;false则创建新的文件覆盖原文件
换行:换行符号
windows :\r\n Linux :/n mac :/r
编辑
▶ IO异常的处理
之前一直把异常抛出,而实际开发中并不能这样处理,应该使用 try...catch...finally 代码块处理异常部分
在 jdk1.7 之前使用 try catch finally 处理流中的异常
格式:
try {
可能会出现异常的代码
} catch(异常类变量 变量名) {
异常的处理逻辑
} finally {
一定会执行的代码
资源释放
}
编辑
✔ JDK7 的新特性:在 try 的后面可以增加一个(),在括号中可以定义流对象,则这个流对象的作用域就在 try 中有效,try 中的代码执行完毕,会自动把流对象释放,不用写 finally
格式:
try( 定义流对象 ){
可能会出现异常的代码
} catch( 异常类变量 变量名 ){
异常处理逻辑
}
编辑
✔ JDK9 的新特性 :try 的前面可以定义流对象,在 try 后面的() 中可以直接引入流对象的名称(变量名),在 try 代码执行完毕之后流对象也可以释放掉,不用写 finally
格式:
定义流对象 ;
try( 流对象名称;流对象名称;... ){
可能会出现异常的代码
} catch( 异常类变量 变量名 ){
异常处理逻辑
}
编辑