第十二章 java流与文件操作 第一讲
在这一章中主要讲的是在面向对象语言中,输入和输出都是通过数据流来实现的。以及在Java中,处理数据流的类主要被放在java .io包中。
第 一 数据流的概念
数据源和数据宿统称为数据源,但是从仔细的方面讲数据源是是指那些能够提供数据的地方,包括键盘、磁盘文件、网络接口等。而数据宿则是接收数据的地方。
正因为数据源的多样性,才有了数据流。
Java中把不同的数据源与程序之间的数据传输都抽象表述为“流”(stream),以实现相对统一和简单的输入/输出操作方式。
根据数据方向的不同可分为:
(1)根据数据流动的方向,可分为输入流(Input Stream)和输出流。输入流只能从中读取数据,而不能向其写出数据;输出流则只能向其写出数据,而不能从中读取数据。
(2)根据数据流所关联的是数据源还是其他数据流,可分为节点流(Node Stream)和处理流(Processing Stream)。节点流可以从/向一个特定的地方读/写数据。处理流是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现增强的数据读/写功能,处理流并不直接连接到数据源。
(3)根据传输数据的“颗粒大小”划分,可分为字符流(Character Stream)和字节流(Byte Stream)。
字符流和字节流的不同:
(1) 节点流
实例化: FileReader fr=new FileReader("dome.txt")
注意:dome.txt是读取指定的文件名称
(2)处理流
实例化:BufferedReader bf=new BufferedReader(new FileReader("dome.txt"));
注意:BufferedReader 是对输入的缓冲,对数据的连接和封装
字节流一次或多次传送对个字节 可处理所有类型的数据
字符流一次或多次传送对个字流 只能处理字符数据
所有字节流都是以 InputStream OutputStream 结尾的
所有字符流都是以 Reader Writer 结尾的
一 Reader Writer字符的输入和输出
Reader和Writer是父类,是抽象类,用来处理数据的输入和输出
(1)首先说一下Reader类,他共有三种read重载的方法
第一种:public int read() throws IOException
第二种:public int read(char[] cbuf) throws IOException
注意: 读到的是实际的数据,并不是数组的长度
第三种:public abstract int read(char[] cbuf, int off,int len) throws IOException
注意:int off是读取到的偏移量(从哪个位置开始存放) int len是读取的长度
(2)然后是Writer父类,也是三种writer重载的方法
第一种:public void write(int c) throws IOException
第二种:public void write(char[] cbuf) throws IOException
第三种:public abstract void write(char[] cbuf,int off, int len) throws IOException
FileWriter的使用
FileWriter类只有自己的构造函数,此类是在利用构造函数的基础上用于创建文本文档,在创建的过程中可以在当前的路径下,也可以在指定的路径下。
例如: FileWriter fw=new FileWriter("d:/q/demo.txt");
FileReader的使用
是用来从指定的文本中读取数据,在读取的时候有两种方式,一种是一个字符一个 字符的读,另一种是当初数组来读。
(1)当在用read()时是一个 字符一个字符的读
int n=fr.read();
while(n!=-1){
System.out.print((char)n);//强制类型转换,每读取一个都显示出来
n=fr.read();
}
(2)当在用read(char[] cbuf)是当成数组
FileReader fr=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(IOException e ){
System.out.println(e.totring());
}