以上大体说明了JAVA中流的层次结构。接下来说说java中经常采用的两类流:实体流和装饰流。实体流是指直接连接数据源的流类,它可以独立使用;而装饰流不直接连接数据源,而是以实体流对象为基础建立的流类。java i/0中我们经常针对的是文件操作,接下来就以文件为例主要说说这两类 一、java实体流FileInputStream,FileOutputStream,FileReader,FileWriter 1.文件字节流FileInputStream,FileOutputStream (1)文件输入流FileInputStream类:我们采用以下方式打开一个已经存在的文件: FileInputStream fileStream=new FileInputStream(new File(String filename));当filename不含带路径时候,就打开当前目录下面的文件;如果filename含带路径,就在指定的路径下面打开文件。 打开文件以后,使用read()方法一个字节一个字节的读取文件内容;当文件读完以后,采用close()方法关闭文件流即可。以下是一个从文本文件中读取数据并且显示出来的例子:
import java.io.*;
classFileInputStreamDemo1 {
}}
在上述例子中,可以通过file.length()来判断是否已经到达文件末尾。
(2)文件输出流FileOutputSream:我们采用以下方式将数据写入到文件中去
FileOutputStream filestream=new FileOutputStream(new File(String filename));这些含义均和上面FileInputStream类相对应。需要说明的是FileOutputStream类中还有另外一个构造方法:
FileOutputStream(File file, booleanappend)
当参数append为true的时候表明追加文件内容,参数为false的时候表示不追加文件内容。
接下来用public void write(byte b[],int off,int len); 写入内容。为了防止无法写入的问题,我们一般在这个方法后面采用flush()方法进行强行写入,写完以后采用close()方法关闭对象。具体实例如下:
import java.io.*;
class FileOutputStreamExample{
} }
2.文件字符流FileReader,FileWriter(操作流程和字节流相同)
(1)输入流FileReader类:没有什么特别的方法就不说了
(2)输出流FileWriter类:特别提到,这里用有一个方法void write(String str) throws IOException,这个方法能够写入字符串。在这里面顺便比较一下Writer类和OutputStream类中flush()方法的区别:在OutputStream类的子类中并没有对父类的这一个方法进行实现;但是Writer类中的flush()方法是一个抽象方法,它的子类都对这个方法进行了实现。无论是使用字节流还是字符流进行输出的时候,我们一般都加上这个方法,这样可以方法数据无法写入到输出流中去。
二、java装饰流
1.缓冲流BufferedReader,BufferedWriter类
(1)BufferedReader类:装饰流的创建是先创建一个实体流,然后在创建一个装饰流。该类创建如下:
FileReader filereader=new FileReader(new File(String filename));
BufferedReader bfReader=new BufferedReader(filereader);
在这个类中最常用方法是String readLine()方法,它从缓冲输入流中读取一行字符,并且以字符串的形式放回。下面看看这个流的使用实例:
publicclassRraderDemo
{
}
(2)BufferedWriter类:它最常用的方法是void write(String str)和void newLine()。后面这个方法是将回车换行符写入到流中,必须捕获异常IOException
2.数据流DataInputStream,DataOutputStream
这两个类提供了java读写基本数据类型int,byte,boolean,long,float,double,short,char的功能。它们对文件操作的时候要分别依附于FileInputStream和FileOutputStream这两个实体流。
通过上述介绍的内容,我们就可以实现对文件的基本操作,接着会在后续介绍JAVA I/0流。