java之IO流总结

来源:互联网 发布:java lambda filter 编辑:程序博客网 时间:2024/05/01 01:57

第一部分:IO体系

1、IO流:

(1)描述:

用于处理设备之间的数据传输的体系,Java对数据的传输操作都是通过流的方式进行的,用于操作流的对象都在IO包中

(2)划分:

按流向分:输入流、输出流

按操作数据分:字节流和字符流(用编码表将字节处理成字符)

2、IO的四大基类

Reader    字符读取流                     Writer       字符写入流

InputStream      字节读取流           OutputStream   字节写入流

3、常用基本IO类
(1)Reader:

BufferedReader         字符读取缓冲流

InputStreamReader:   字符读取转换流

FileReader         文本文件读取流

(2)Writer:

BufferedWriter          字符写入缓冲流

OutputStreamWriter :字符写入转换流

FileWriter          文本文件写入流

(3)InputStream:

FileInputStream        文件读取流

(4)OutputStream:

FileOutputStream    文件写入流





第二部分:字符流

1、Reader

(1)共性方法:

close()   关闭流资源
read()    读取一个字符
read(char[] cbuf)   将读取的字符存放在指定字符数组中
read(char[] cbuf, int off, int len)    将读取的字符存放在指定字符数组的指定位置中

(2)InputStreamReader

描述:InputStream转换流,将字节流转换成字符流

通常在涉及到字符编码转换时用到转换流

FileReader

是InputStreamReader的子类,是封装了默认编码表的转换流

构造函数必须传入文件源,如果没有该资源,则报异常

(3)BufferReader

描述:字符读取缓冲流,要明确需要缓冲的读取流对象

可以提高读取流的读取效率,并增加了更丰富的操作方法

方法:

readLine()   读一行字符,返回的数据不包含换行符

close()        关闭流资源,这里要关闭的是其对应的读取流的底层资源,其本身并不涉及底层资源调用

练习:模拟读一行数据的方法

LineNumberReader

带行号的字符缓冲区

方法:

getLineNumber    获取行标号

setLineNumber    设置行标号

readLine       读一行

扩展:键盘录入的读取录入信息原理和字符缓冲流读一行的原理一样,可以用转换流使键盘录入可以使用字符缓冲流的读一行方法

2、Writer

(1)共性方法:

close()     关闭此流资源,关闭前将流中的数据刷新到目的地中
flush()      将流的缓冲区中的数据刷到目的地中,刷新后还可以继续写入数据
write(char[] cbuf)     将字符数组中的数据写入到流中
write(char[] cbuf, int off, int len)    将字符数组中指定位置的数据写入到流中
write(int c)         将一个字符写入到流中
write(String str)    将字符串写入到流中
write(String str, int off, int len)    将字符串中指定位置的子串写入到流中


(2)OutputStreamWriter

描述:输出转换流,将字符流转换成字节流

可以指定写入数据的编码表,只有转换流可以使用指定编码表

FileWriter

OutputStreamWriter的子类,其实是相当于封装好了默认的编码表的转换流

构造

构造函数必须定义文件源,如果无法创建,则报异常

如果指定的位置没有该文件,则新建,如果有,则覆盖原有数据

FileWriter(String fileName)    构造函数接收一个要将流中数据写入文件的对应文件名

FileWriter(String fileName,boolean append)    append值为true时,将数据写在已有文件末尾处


(3)BufferedWriter

描述:

构造函数传入一个流对象(为了给流对象提高效率,所以必须要先有流对象)

缓冲区的资源来自于流对象,所以关闭缓冲区就是在关闭流对象的资源

只要用到缓冲区就要记得刷新

方法:

close   关闭流资源

flush    将流中的数据刷新到指定目的地

newLine    写入一个换行符到流中



第三部分:字节流

1、InputStream

共性方法:

close()   关闭流资源

read()     读一个字节

read(byte[] b)    将字节读取到字节数组中

read(byte[] b, int off, int len)     将字节读取到字节数组的指定位置

FileInputStream


2、OutputStream

方法:

close()    关闭资源

flush()      强制刷新

write(byte[] b)     写字节数组

write(byte[] b, int off, int len) 

write(int b)     写一个字节

FileOutputStream

文件输出流

PrintStream

打印流

可用于:打印异常信息、打印系统属性信息

PrintStackTrace(···)

properties对象.ListnewPrintStream(流))

不可以用字符流来操作非文本文件


第四部分:IO的操作思路及IO异常

1、操作IO流的思路

(1)明确源和目的;

1)源:

应用体系:

InputStream

Reader

源设备:

键盘 、硬盘(文件)、内存

2)目的:

应用体系:

OutputStream

Writer

目的设备:

控制台、硬盘(文件)、内存

(2)明确操作的数据类型;

纯文本数据:

应用体系:

Reader

Writer

非纯文本数据:

应用体系:

InputStream

OutputStream

2、IO异常处理

处理流程

1、如果创建流不成功,即没有获取到资源,后面的都不用再执行了,所以一起将创建流到对流的操作部分一起写入到一个try语句中

2、不管操作资源发生什么异常,到最后流的资源一定要回收,所以close方法一定要执行,所以close方法写在finally里面,并且要单独定义一个try语句处理close方法可能发生的异常

3、流有可能创建不成功,所以关闭流之前要判断流对象是否为空,如果为空则不用关

log4j:

是处理异常信息的网络资源包


0 0