《教学课件第九章 IO流.ppt》由会员分享,可在线阅读,更多相关《教学课件第九章 IO流.ppt(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、PPT模板下载:/moban/ 行业PPT模板:/hangye/ 节日PPT模板:/jieri/ PPT素材下载:/sucai/PPT背景图片:/beijing/ PPT图表下载:/tubiao/ 优秀PPT下载:/xiazai/ PPT教程: /powerpoint/ Word教程: /word/ Excel教程:/excel/ 资料下载:/ziliao/ PPT课件下载:/kejian/ 范文下载:/fanwen/ 试卷下载:/shiti/ 教案下载:/jiaoan/ 字体下载:/ziti/ 教学课件第九章 IO流Java第九章第九章 IO流流9.2 文件读写文件读写9.1 流的概念流的概
2、念9.3 过滤流和节点流过滤流和节点流9.4 RandomAccessFile类类9.1 流的概念流的概念v流概念的理解流概念的理解v流的分类流的分类 按流动的方向分为输入流和输出流 按流动的数据类型分为字符流和字节流 按流的建立方式和工作原理 分为节点流和过滤流9.1 流的概念(续)流的概念(续)v字节流字节流 字节流提供了对字节进行输入输出处理的方法 。按照传输的方向字节流可以分为InputStream和OutputStream。其中InputStream是所有输入字节流的父类,OutputStream是所有输出字节流的父类。 在InputStream和OutputStream中定义了输入
3、字节流和输出字节流最基本的方法,他们是抽象类。9.1 流的概念(续)流的概念(续)v输入字节流的类层次图输入字节流的类层次图9.1 流的概念(续)流的概念(续)v输出字节流的类层次图输出字节流的类层次图9.1 流的概念(续)流的概念(续)v字符流字符流 字符流提供了对字符进行输入输出处理的方法。字节流与字符流主要的区别是他们的处理方式。 所有的字节流都是基于字节对数据进行处理,而实际使用中很多情况我们处理的数据是文本字符,所以Java提供了基于字符处理的字符流。9.1 流的概念(续)流的概念(续) 按照传输的方向字符流可以分为Reader和Writer。其中Reader是所有输入字符流的父类,
4、Writer是所有输出字符流的父类。 在Reader和Writer中定义了输入字符流和输出字符流最基本的方法。9.1 流的概念(续)流的概念(续)v输入字符流的类层次图输入字符流的类层次图9.1 流的概念(续)流的概念(续)v输出字符流的类层次图输出字符流的类层次图9.1 流的概念(续)流的概念(续)v预定义流预定义流 Java程序默认导入java.lang包,这个包中有一个System类,这个类包含三个预定义静态常量,分别是in、out和err。 System. in是标准输入流,默认设备是键盘。System. out是标准输出流,默认设备是控制台。System. err是标准错误流,默认设
5、备是控制台。9.2 文件读写文件读写vFile类类 Java中的File类指文件和目录的集合。 Java语言中通过File类来建立与磁盘文件的联系。File类主要用来获取文件或者目录的信息,File类的对象本身不提供对文件的处理功能,要想对文件实现读写操作需要使用输入输出流。 9.2 文件读写(续)文件读写(续)v注意:注意: Java能正确处理UNIX和Windows/DOS约定路径分隔符。如果在Windows版本的Java下用斜线(/),路径处理依然正确。记住,如果你用Windows/DOS使用反斜线()的约定,你需要在字符串内使用它的转义序列()。Java约定是用UNIX和URL风格的斜
6、线来作路径分隔符。 9.2 文件读写(续)文件读写(续)vFileInputStream FileInputStream是InputStream类的子类。常用的构造方法如下: FileInputStream(String name)使用指定的文件名name创建一个FileInputStream的对象,如果文件不存在会产生FileNotFoundException。 FileInputStream(File file) 使用指定的文件对象来创建一个FileInputStream的对象,如果文件不存在会产生FileNotFoundException。9.2 文件读写(续)文件读写(续) 下面的例子
7、创建了两个使用同样磁盘文件且各含一个上述构造方法的FileInputStream对象:FileInputStream f1 = new FileInputStream(hello. txt)File f = new File(hello. txt );FileInputStream f2 = new FileInputStream(f); 尽管第一个构造方法可能更常用到,第二个构造方法允许在把文件赋给输入流之前用File对象的方法更进一步检查文件,例如判断文件是否存在。 9.2 文件读写(续)文件读写(续) FileInputStream的常用方法: int read( )如果下一个字节可读则
8、返回一个整型,遇到文件尾时返回-1 int read(byte buffer )试图读取buffer.length个字节到buffer中,并返回实际成功读取的字节数。遇到文件尾时返回-1 int read(byte buffer , int offset, int numBytes)试图读取buffer中从bufferoffset开始的numBytes个字节,返回实际读取的字节数。遇到文件尾时返回-1 void close( )关闭输入源。关闭之后的读取会产生IOException异常9.2 文件读写(续)文件读写(续)vFileOutputStream FileOutputStream是Ou
9、tputStream类的子类。常用的构造方法如下: FileOutputStream(String name) 使用指定的文件名name创建一个FileInputStream的对象。 FileOutputStream(File file) 使用指定的文件对象来创建一个FileInputStream的对象。 FileOutputStream的创建不依赖于文件是否存在。在创建对象时FileOutputStream在打开输出文件之前创建它。 9.2 文件读写(续)文件读写(续) FileOutputStream的常用方法: void close( )关闭输出流。关闭后的写操作会产生IOExcepti
10、on异常 void flush( ) 刷新输出缓冲区 void write(int b)向输出流写入单个字节。注意参数是一个整型数,它允许你不必把参数转换成字节型就可以调用write( ) void write(byte buffer )向一个输出流写一个完整的字节数组 void write(byte buffer , int offset, int numBytes) 写数组buffer以bufferoffset为起点的numBytes个字节区域内的内容9.2 文件读写(续)文件读写(续)v字符流为字符流为基于字符基于字符的输入输出处理提供了丰富的的输入输出处理提供了丰富的功能,而功能,而R
11、eader和和Writer是所有字符流的基类是所有字符流的基类。Reader和和Writer都是都是抽象类抽象类,它们定义了字,它们定义了字符流的一些常用方法(见书表符流的一些常用方法(见书表8-5、表、表8-6)。)。9.2 文件读写(续)文件读写(续)vFileReader FileReader类是Reader类的子类,它可以对文件进行读取。常用的构造方法如下: FileReader(String name) 使用指定的文件名name创建一个FileReader的对象,如果文件不存在会产生FileNotFoundException。 FileReader(File file) 使用指定的文
12、件对象来创建一个FileReader的对象,如果文件不存在会产生FileNotFoundException。 FileReader常用的方法参考Reader类。9.2 文件读写(续)文件读写(续)vFileWriter FileWriter类是Writer类的子类,它可以对文件进行写入。它常用的构造方法如下: FileWriter(String name) 使用指定的文件名name创建一个FileWriter的对象。 FileWriter(File file) 使用指定的文件对象file创建一个FileWriter的对象。 FileWriter类的创建不依赖于文件存在与否。在创建文件之前,Fi
13、leWriter将在创建对象时打开它来作为输出 。9.3 过滤流和节点流过滤流和节点流v过滤流与节点流过滤流与节点流 根据流的建立方式和工作原理,将流分为:节点流(Node Streams)直接建立在输入、输出媒体上。过滤流(Filter Streams),过滤流必须以某一个节点流作为流的来源,可以在读/写数据的同时对数据进行处理。9.3 过滤流和节点流(续)过滤流和节点流(续)v过滤流必须建立在节点流之上,对节点流中的数过滤流必须建立在节点流之上,对节点流中的数据进行某些加工、处理,并提供一些友好的方法据进行某些加工、处理,并提供一些友好的方法供用户进行输入、输出操作以及流控制。供用户进行输
14、入、输出操作以及流控制。v我们前面学习过的我们前面学习过的FileReader、FileWriter、FileInputStream、FileOutputStream对对文件进行直接的操作,属于节点流。文件进行直接的操作,属于节点流。 9.3 过滤流和节点流(续)过滤流和节点流(续)vJava中的中的InputStream类对流数据进行封装类对流数据进行封装的时候是不具备缓冲功能的,由于数据的传输速的时候是不具备缓冲功能的,由于数据的传输速度远小于处理器的运算速度度远小于处理器的运算速度 ,会造成处理器的浪,会造成处理器的浪费。因此,费。因此,Java语言提供了语言提供了BufferedInp
15、utStream这个过滤流来封装这个过滤流来封装InputStream节点流,对流数据增加了带缓冲节点流,对流数据增加了带缓冲的封装来提高数据处理的性能。同样的提供了的封装来提高数据处理的性能。同样的提供了BufferedOutputStream来提高来提高OutputStream类的数据处理性能。类的数据处理性能。9.3 过滤流和节点流(续)过滤流和节点流(续)vBufferedInputStream类类 常用的构造方法: public BufferedInputStream(InputStream in) public BufferedInputStream(InputStream in,
16、int size) 两种构造方法都是为某种输入流in创建一个新的缓冲流,方法一创建的缓冲大小为缺省值(32 bytes),方法二则由用户指定缓冲区大小,在性能优化时,通常都把size的值设定为内存页大小或I/O块大小的整数倍。 在I/O量不大时,该类所起作用不是很明显;但当程序I/O量很大,且对程序效率要求很高时,使用该类就能大大提高程序的效率。9.3 过滤流和节点流(续)过滤流和节点流(续)vBufferedOutputStream类类 常用的构造方法: public BufferedOutputStream(OutputStream out) public BufferedOutputSt
17、ream(OutputStream out,int size) BufferedOutputStream的两种构造方法的用法与BufferedInputStream的两种构造方法的用法类似。 9.3 过滤流和节点流(续)过滤流和节点流(续)v在使用在使用Java语言进行编程时,常常需要对除了二语言进行编程时,常常需要对除了二进制文件和使用文本文件外的基于进制文件和使用文本文件外的基于Data的数据的数据操作操作 ,这里的,这里的Data指的是指的是Java的基本数据类型的基本数据类型和和String。基本数据类型包括。基本数据类型包括byte、int、char、long、float、doubl
18、e、boolean和和short。使用前面提到的。使用前面提到的InputStream和和OutputStream对这些数据对这些数据 进行处理将会非常进行处理将会非常的麻烦,的麻烦,Java语言提供了语言提供了DataInputStream和和DataOutputStream基本数据类型进行操作基本数据类型进行操作。 9.3 过滤流和节点流(续)过滤流和节点流(续) DataInputStream和DataOutputStream的构造方法的基本结构为: DataInputStream(节点流对象) DataInputStream(其它过滤流对象) 在DataInputStream和Data
19、OutputStream两个类中的方法都很简单,基本结构为readXXXX( )和writeXXXX( )其中XXXX代表基本数据类型或者String 。9.3 过滤流和节点流(续)过滤流和节点流(续)9.4 RandomAccessFile类类 vRandomAccessFile类类 有时候必须对文件的某些部分进行读取或者写入的操作,也就是进行随机存取,即读写文件的位置要能够在文件中随意的移动。而我们前面提到的输入输出流都只能对文件进行顺序的读写,当要对文件进行随机存取的时候我们使用RandomAccessFile 类来进行处理。9.4 RandomAccessFile类类 v类类Rando
20、mAccessFile的声明为:的声明为: public class RandomAccessFile extends Object implements DataInput, DataOutput 接口DataInput 中定义的方法主要包括从流中读取基本类型的数据、读取一行数据、或者读取指定长度的字节数。如:readBoolean( )、readInt( )、readLine( )、readFully( ) 等。接口DataOutput 中定义的方法主要是向流中写入基本类型的数据、或者写入一定长度的字节数组。如:writeChar( )、writeDouble( )、write( ) 等。
21、 注意:RandomAccessFile可对文件实现读和写两种操作。9.4 RaomAccessFile类类 (续续)vRandomAccessFile类的常用构造方法:类的常用构造方法: RandomAccessFile(String name, String mode) name是文件名,mode是打开方式,例如“r”表示只读,“rw”表示可读写。 RandomAccessFile(File file, String mode) file是文件对象,mode 是打开方式,例如“r”表示只读,“rw”表示可读写。9.4 RaomAccessFile类类 (续续)vRandomAccessFile类操作文件指针的常用方类操作文件指针的常用方法:法: long getFilePointer( ) 用于得到当前的文件指针 void seek(long pos) 用于移动文件指针到指定的位置,调用seek( )方法后,接下来的读或写操作将在文件的新位置发生使文件指针向前移动指定的n个字节
限制150内