Io流阶段大总结
字节流结构
输入流:
ObjectInputStream:从文件中读取对象
FileInputStream:从文件中输入(读)字节
BufferedInputStream:底层有缓冲数组,在不定义数组的情况下,提高输入(读)效率
输出流:
ObjectOutStream:
经一个对象写入文件
FileOutputStream:
将数据输出(写)文件
BufferedOutputStream:
底层有缓冲数组,再不定义数组情况下,提高输出(写)效率
字符流结构图
输入流:
FileReader:
输入(读)文本文件的数据
BuffereReader:
底层有缓冲数组,在不定义数组情况下,提高输入(读)效率,同时有特有readLine()方法,一次可以读取一整行数据
InputStreamReader:
是从字节流到字符流的桥梁:它读取字节,并使用指定的charset将其解码为字符.它使用的字符集可以有名
称指定, 也可以被明确指定,或者使用平台的默认字符集
输出流:
FileWriter:
将数据输出(写)到文本文件
BufferedWriter:
底层有缓冲数组,再不定义数组的情况下,提高写入效率.同时有特有newLine()方法输出跨平台换行
OutputStreaWriter:
是从字符流到字节流的桥梁:使用指定的charset将其解码为字节,它使用的字符集可以是由名称指定,
也可以被明确指定,或者可以接受平台默认的字符集
字节流常用方法
FileInputStream,BufferedInputStream:
-
int read():读取一个字节
-
int read(byte[]b):读取一个字节数组
-
void close:释放文件(关流)
FileOutputStream、BufferedOutputStream:
-
void write(int b):写入一个字节
-
void write(byte[]b):写入一个字节数组
-
void write(byte[]b,int off(开始位置),int len(个数)):写入一个字节数组,从off开始,写入len个
-
void close:释放文件(关流)
ObjectInputStream:
-
Object readObject():读取一个对象
-
void close:释放文件(关流)
ObjectOutputStream:
-
void writeObject(Object obj):写入一个对象
-
void close:释放文件(关流)
字符流常用方法
FileReader、BufferedReader、InputStreamReader:
-
int read():一次读取一个字符
-
int read(char[]char):一次读取一个字符数组
BufferedReader特有方法:
-
String readLine():读取一整行
FileWriter、BufferedWriter、OutputStreamWriter:
-
void write():写入一个字符
-
void write(char[]char):写入一个字符数组
-
void write(char[]char,int off(开始位置),int len(个数)):写入一个数组的一部分,开始位置off,写入个数len
-
void write(String str):写一个字符串
-
void write(String str,off(开始位置),len(个数)):写一个字符串一部分,开始位置off,写入个数len
-
void flush():刷新流
-
void close():释放文件
BufferedWriter特有方法:
-
void newLine:跨平台通用换行
Properties集合与Io流集合的方法:
-
void load(Reaner reader):将字符输入流中的数据加载到Properties对象中
-
void store(Writer writer,String comments):将Properties集合中的数据存入字符输出流
注意事项
-
flush():
刷新流,之后还可以继续写数据
-
close():
关闭流,释放资源,但是关闭之前会先写出数据.一旦关闭,就不能再写数据了
-
关流操作应定要放在try-catch-finally中的finally中:
-
被finally控制的语句一定会被执行,不管有没有异常,也不管异常有没有被捕获
-
即使finally中包含continue,break,return,try块结束后,finally块也依旧会执行
-
-
使用字节输出流注意事项:
-
如果文件不存在就创建
-
写整数时,实际写出的是整数对应码表的字母
-
使用完必须释放资源
-
表示文件的路径名称必须存在
-
-
使用字符输出(写出)流注意事项:
-
创建字符输出流对象时如果文件不存在就创建,存在就清空
-
写数据时:
-
写int就是写的ASCLL码表中对应的字节
-
写字符串就是将字符串原样输出
-
-
必须释放资源
-
-
使用字符流(输入)读取数据注意事项:
-
文件必须要存在
-
必须释放资源
-
-
对象操作流注意事项:
-
如果想要这个类能被序列化,那么这个类必须实现一个接口Serializable
-
Serializable是一个标记接口,实现给接口不需要重写任何方法
-
静态成员不加transient关键字都会被序列化
-
serialVersionUID 指定序列号,可以避免javabean修改,造成序列号改变运行时候出错
-
-
数据读取末尾的输出标记:
-
字符,字节读取到文件结尾会返回-1
-
读取一整行到文件末尾会返回null
-
读取对象到末尾会报EOFException
-
-
File[]listFiles()注意点:
-
File指向不存在的,返回null
-
存在的是文件:返回null
-
存在的是文件夹正常输出,如果是空文件夹,返回长度为0的File数组
-
权限问题没有访问权限,返回null
注意:返回为null的情况,可以有效避免遍历返回数组时候出现运行时异常
-