IO流
1.什么是IO流
*流(数据):字节或字符,一个字符=两个字节
*内存:临时存储作用
*输入和输出是以内存为基准:硬盘数据进入内存就是输入,数据从内存出去进硬盘就是输出。
*读取和写入是以硬盘为基准:硬盘数据进入内存就是读取,数据存内存出去进硬盘就是写入。
|
2.IO流分类
*输入流:把数据从设备上读取到内存当中
*输出流:把内存中的数据写入到设备中
|
数据类型分类
*字节流:以字节为单位
*字符流:以字符为单位
|
4.IO流顶级父类
*
*
*
字节流
1.一切皆为字节
一切文件,图片数据都是字节,字节流可以传输任意形式的数据。底层传输的是二进制
|
2.文件字节输出流:FileOutputStream
*是所有字节输出流的父类
构造方法
作用:1.创建一个FileOutputStream对象
------2.在对应的文件路径上创建一个文件,文件以及存在就清空,不存在就创建
------3.把FileOutputStream对象指向创建好的文件
FileOutputStream(File file)--->提前创建一个file类对象,传入对象
FileOutputStream(String name)--->直接传入要把文件创建在什么位置,或者指向哪个文件
api方法
1.关闭流----->流对象.close();--->关闭流的时候会自动刷新缓冲区
2.刷新------->流对象.flush();--->目的就是把缓冲区的数据存到数据中
3.数组写入--->流对象.write(byte[] byte);---->把数组中的数据一个一个的输入到数组当中
4.数组分段写入-->流对象.write(byte[] byte,int off,int len);--->从off位置开始,截取长度为len写到文件中
5.写入数据--->流对象.write(int b);--->把b数据写到文件中
|
FileOutputStream使用步骤
1.构造一个FileOutputStream对象,指向一个地址使得创建一个文件
2.调用FileOutputStream对象的write方法
3.调用FileOutputStream对象的close方法释放资源
|
实现追加书写
FileoutputStream(File file;boolean append);创建文件输入流,以写入指定的file对象(也可以直接写地址字符串),如果aeeendtrue,保存原油数据继续追加,如果appendfalse,清空原有数据,重新书写
追加换行操作:"\r\n"--->\r到本行行首,,,\n换到下一行
*
*
*
文件字节输入流:FileInputStream
目的:把文件里面的数据读取到内存中
|
构造方法
FileInputStream(File file);打开与实际文件存在的连接,创建一个FileInputStream对象,文件由系统中File对象file命名。(通过file对象)
FileInputStream(String name);打开与实际文件存在的连接,创建一个FileInputStream对象,文件由系统中文件的路径name命名。(通过文件路径名)
|
api方法
关闭流-->流对象.close()
读取单个数据---->流对象.read()--->返回一个int类型值
读取数组------->流对象.read(byte[] byte)--->返回int是读取数据个数,byte的长度表示每次读取几个字节
使用步骤
1.创建FileInputStream对象,指定读取文件,必须存在,不存在就报错
2.调用方法FileInputStream对象的read方法
3.关闭流;FileInputStream对象的close方法
|
文件复制步骤
1.先用字节输入流,写入文件的路径,用read方法读取出来
2.创建字节输出流,写入要复制到哪里的路径,用write方法写入文件
3.关闭流的时候先开后关,后开的先关
代码演示
*
*
*
字符流(和字节最大大的区别就是,可以搞汉字不乱码)
当我们使用字节流的时候遇到中文字符,可能不会显示完整的字符。一个字符可能占用多个字节存储,所以java中提供了字符流类,以字符为单位来读写数据,处理大文件的时候好用啊
|
字符输入流【Reader】
抽象类用于表示,读取字符流的所有类超类,可以读取字符信息到内存当中,它定义了字符输入流的基本共性方法:
*public void close();关闭输入流,并且释放与此流相关的其他系统资源。
*public int read();从输入六种提取一个字符
*public int read(char[] char);从输入流中一次性读取多个字符,并存储到字符数组char中
|
FileReader类
备注:
- 字符编码:字节与字符的对应规则,idea中文编码是【utf-8】
- 字节缓冲区:一个字节数组,用来临存储字节数据
2.步骤 - 创建一个File对象
- 把创建的对象当做参数传入FileReader参数中,创建FileReader对象
- 使用read方法读取文件数据
- 愚弄close方法关闭流释放资源
|
字符输出流【writer】
抽象类时表示用于输出字符流,的所有类的超类,将指定的字符信息写入到目的地当中,它定义了字符串输出流的基本共性API方法
*void writer(int c);写入单个字符
*void write(char[] char);写入字符串数组
*abstract void writer(char[] char,int off,int len); 写入char数组的一部分,从off位置开始,写len那么多字符
*void write(String name);写入字符串
*void write(String str,int off,int len);写入一段字符串,off开始len那么长
*void flush();刷新
*void clase();关闭之前先刷新
FileWriter类
写入字符到文件里面
构造方法
*FileWriter(File file);创建一个新的FileWriter,指定file文件写入数据
*FileWriter(String name);创建一个FileWriter对昂,指定写的的食宿及放在哪里
使用步骤 - 创建一个FileWriter对象,并指定地址值
- 使用FileWriter的writer方法,把数据写到缓冲区里面(字符串转为自洁的过程)
- 使用FileWriter的flush把内存缓冲区的数据写到文件里面
- 释放资源(会把缓冲区的数据放到文件里面 )
flush和close的区别
flush:刷新缓冲区,刷新之后流还可以继续使用
close:先刷新缓冲区,然后关闭流
如果不关闭流也不刷新,那么数据就在缓冲区里面没有写入文件中,关闭流之后就没办法继续写数据了,想要继续写,有想写道文件里面就用flush
注意:字符流只能操纵文本文件,不能操作图片,视频等,所以淡村的箱操作文本文件就使用字符流,其他情况就是字节流
*
*
*
IO异常处理
JDK1.7之前:使用try...catch....finally处理IO异常
格式:
try{
//可能出现异常代码
}catch(异常类型 变量名){
//异常处理
}finally{
//一般是释放资源,必备执行
}
|
JDK1.7之后:使用try(){}...caytch(){}------》又称为try-with-resource,保证每个资源在语句结束之后会自动关闭。资源就是resource---》程序完成后必须要关闭的对象,也是会自动释放流
格式
try(定义流对象,多个用分号隔开){
//可能出现异常的代码
}catch(异常类型 异常变量){
//异常处理逻辑
}
|
代码