今天讲解的是IO输入输出流。是对文件的操作。
一、流的分类
a)根据数据流动的方向,可分为输入流(InputStream)和输出流。输入流只能从中读取数据,而不能向其写出数据;输出流则只能向其写出数据,而不能从中读取数据。
b) 根据数据流所关联的是数据源还是其他数据流,可分为节点流和处理流。节点流可以从/向一个特定的地方读/写数据。处理流是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现增强的数据读/写功能,处理流并不直接连接到数据源。
c) 根据传输数据的“颗粒大小”划分,可分为字符流(Character Stream)和字节流(Byte Stream)。
d) 节点流 实例化: FileReader fr=newFileReader("dome.txt") 注意:dome.txt是读取指定的文件名称
处理流 实例化:BufferedReaderbf=new BufferedReader(new FileReader("dome.txt"));注意:BufferedReader 是对输入的缓冲,对数据的连接和封装
二、Reader Writer字符的输入和输出
(1) FileWriter类只有自己的构造函数,此类是在利用构造函数的基础上用于创建文本文档,在创建的过程中可以在当前的路径下,也可以在指定的路径下。
例如: FileWriter fw=new FileWriter("d:/q/demo.txt");
write(int c):将一个字符写入到流中,write(String):将一个字符串写入到流中。
(2)FileReader的使用
是用来从指定的文本中读取数据,在读取的时候有两种方式,一种是一个字符一个字符的读,另一种是当初数组来读。
a)当在用read()时是一个字符一个字符的读
int n=fr.read();
while(n!=-1){
System.out.print((char)n);//强制类型转换,每读取一个都显示出来
n=fr.read();
b) 当在用read(char[] cbuf)是当成数组
FileReaderfr=null;
char[] arr=new char[1024];
try{
fr=new FileReader("d:\\q\\demo.txt");
int len=fr.read(arr); //读取的返回值是实际读到的字符数,
while(len!=-1){
System.out.println(new String(arr,0,len));
注意:构建字符串对象,如果字符没有超过1024时,读取的是实际的个数,如果超过1024,则把1024个字符封装成字符数组返回并输出,如果超过1024个字符,
则从第一次保存的字符开始接着读取,知道读完。
len=fr.read(arr);
}
}catch(IOExceptione ){
System.out.println(e.totring());
}