一、概念
- 流就是内存和存储设备之间传输数据的通道或是管道。数据转移的通道
- IO流的分类:
(1)按照方向:【以JVM为参照物】
a.输入流 b.输出流
(2)按照单位:
a.字节流:以字节为单位,可以操作任意类型的文件。
b.字符流:以字符为单位,可以操作文本类型的文件。
【注】:能用记事本打开并且不乱码的文件称之为 文本类型文件
(3)按照功能:
a.节点流:只具有基本的读写功能
b.过滤流:在节点流的基础上增加功能
二、字节流
-
字节流父类(抽象类)
(1)InputStream : 字节输入流父类,对应读操作(read)
(2)OutputStream : 字节输出流父类,对应写操作(write) -
字节节点流
(1)FileOutputStream : 文件字节输出流
常用构造方法:FileOutputStream fos = new FileOutputStream(“file/a.txt”,true);.
常用方法:void write(int n) 每次写出一个字节的内容到文件中
(2)FileInputStream:文件字节输入流
常用构造方法:FileInputStream fis = new FileInputStream(“file/a.txt”);
常用方法:int read(); 每次读取一个字节的内容到JVM中 -
字节过滤流
(1)BufferedOutputStream / BufferedInputStream
a.缓冲流,提高IO效率,减少访问磁盘的次数
b.数据存储在缓冲区,可通过flush() 或close() 将缓冲区内容一次性写入文件中,并清空缓冲区。
close可同时起关流作用。
【注】如果过程中缓冲区已满,则自动将数据写出到文件中,并清空缓冲区。
(2)PrintStream(输出流)
a.缓冲流,提高IO写的效率。
b.增强了操作基本数据类型的方法,同时还可以操作字符串
(3)ObjectOutputStream/ObjectInputStream
a.增强缓冲区,提高IO读写效率
b.增强了操作8中基本数据类型方法
c.对象序列化:【重点】
①概念:对象放在流上进行传输的过程
②参与对象序列化的要求:参与对象序列化的对象的类需实现 java.io.Serializable 接口
否则编译没问题,但运行时报错java.io.NotSerializableException(不可序列化的异常)
③对象的读写操作:
void writeObject(Object obj)
Object readObject()
④读入文件达到尾部标记:java.io.EOFException
⑤如果一个对象的某个属性不想参与对象序列化,则相应属性用 transient修饰
⑥参与对象序列化的对象的自定义属性或者集合中的元素均需实现java.io.Serializable接口,避免运行报错 -
关流
(1)try{}-catch(){}-finally{}
(2)try(){}-catch(){}
三、字符流
-
字符流的父类 【抽象类】
Reader :字符输入流
Writer :字符输出流 -
节点流
(1)FileWriter:文件字符输出流
a. void write( int a )
b. void write( String s )
(2)FileReader:文件字符输入流
a. int read( ) -
过滤流
(1)BufferedReader
int read( ) :一次性读取一个字符内容,返回值类型为int,如果到达文件结尾返回-1.
String readLine( ) :一次性读入一个文本行的内容,返回值类型为String,如果到达文件尾部返回null。
(2)PrintWriter
print() / pritnln()
pritnln(Object obj):可将对象的toString方法的返回值写到文件中 -
桥转换流: InputStreamReader / OutputStreamWriter
(1)作用:字节流转换为字符流的通道
(2)特点:可设置编解码的方式。
(3)步骤:
①创建文件字节流作为基础流
②创建桥转换流,将字节流转换为字符流,同时可以设置编码或解码格式
③可包装过滤流,增强字符流的读写功能
④读写操作
⑤关流,最外层
四、File类 (java.io.File)
- File 和 IO 的区别
(1)IO流:对文件内容直接操作,读文件或者写文件
(2)File :代表一个文件或是文件夹(目录),利用File类中的一些方法对文件或者是文件夹进行操作。 - 常用方法: