java io流
IO的体系。所具备的基本功能就有两个:读、写
1.字节流
InputStream(读) OutputStream(写)
2.字符流
Reader(读) Writer(写)
基本的读写操作方式:
因为数据通常都以文件形式存在
所以就要找到IO体系中可以用于操作文件的流对象
字节流和字符流的区别:
1.字节流读取的时候,读到一个字节就返回一个字节。
字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在utf-8
码表中是3个字节)时。先去查指定的编码表,将查到的字符返回
2.字节流可以处理所有类型数据,如图片、mp3、avi。
而字符流只能处理字符数据
结论:只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。
BufferedReader
reader InputStreamReader FileReader
字符流
writer BufferedWriter
OutputStreamWriter FileWriter
FileInputStream
InputStream FilterInputStream BufferedInputStream
字节流
OutputStream FileOutputStream
FilterOutputStream BufferedOutputStream
对于读取或者写入流对象的构造函数,以及读写方法,还有刷新关闭功能
会抛出IOException或其子类
所以都要进行处理。或者throws抛出,或者try catch处理
目前学习的流对象
字符流
FileReader FileWriter
BufferedReader BufferedWriter
字节流
FileInputStream FileOutputStream
BufferedInputStream BufferedOutputStream
字节流的read()方法读取一个字节,返回的不是byte类型,而是int类型
对于write方法,可以一次写入一个字节,但接收的是一个int类型数值
只写入该int类型的数值的最低一个字节(8位)
简单说:read方法对读到的数据进行提升,write对操作的数据进行转换
转换流
特点:
1、是字节流和字符流之间的桥梁。
2、该流对象中可以对读取到的字节数据进行指定编码表的编码转换
什么时候使用?
1、当字节和字符之间有转换动作时。
2、流操作的数据需要进行编码表的指定时。
具体的对象体现:
1、InputStreamReader:字节到字符的桥梁
2、OutputStreamWriter:字符到字节的桥梁
注意:
在使用FileReader操作文本数据时,该对象使用的是默认的编码表
如果要使用指定编码表时,必须使用转换流
例:
FileReader fr=new FileReader("a.txt");
//操作a.txt中的数据是使用系统默认的编码(默认为GBK)
InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt"));
//这操作a.txt中的数据也是使用系统默认的编码
如果a.txt中的文件的字符数据是通过utf-8的形式编码,这时就必须指定编码表
InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt"),"utf-8");
当指定绝对路径时,定义目录分隔符有两种方式
1、反斜线 但是一定要写2个。\\ new FileWriter("d:\\demo.txt");
2、斜线 写一个即可。/ new FileWriter("d:/demo.txt");
字符流的缓冲区
缓冲区提高了对流的操作效率
bufferedWriter:
特有方法:newLine();//跨平台的换行符
BufferedReader:
特有方法:readLine();//一次读一行,到行标记时,将行标记之前的字符
数据作为字符串返回,当读到末尾时,返回null。
流操作的基本规律
1、明确数据源和数据汇(数据目的)。其实是为了明确是输入还是输出流
2、明确操作的数据是否是纯文本数据。其实是为了明确字符流还是字节流