《Java语言程序设计 教学课件 ppt 作者 于红 第8章__IO流》由会员分享,可在线阅读,更多相关《Java语言程序设计 教学课件 ppt 作者 于红 第8章__IO流(44页珍藏版)》请在金锄头文库上搜索。
1、第八章 I/O流,8.1流的概述,当程序要读取I/O设备上的数据或将内存中的数据写入I/O设备上时,就可以使用输入输出流,简称I/O流。 I/O流有两种基本类型:输入流和输出流。 虽然I/O流经常与磁盘文件存取有关,但是I/O流的源和目的地也可以是键盘、鼠标、内存或显示器窗口等。,流模型的最大好处是:将文件读/写、网络读/写、内存读/写等操作全部统一起来,在流的层次上达到操作的一致性,从而更简明、有效。 在java.io包中,有一些流是结点流,即它们可以从一个特定的地方读写,例如磁盘或者一块内存。其他流称作过滤器。 Java的I/O流库提供大量的流类(在java.io包中)。其中有4个重要的A
2、bstract类: 1)InputStream(字节输入流) 2)Reader(字符输入流) 3)OutputStream(字节输出流) 4)Writer(字符输出流),其中InputStream 和Reader类,继承自Object类,分别是所有字节输入流和字符输入流的父类。这两个类中都含有名为read()的抽象方法,用于读取单个字节或者字符。这个方法执行时,线程将被阻塞,直到读入有效数据或者抛出一个异常为止。所有InputStream和Reader的子类都必须实现read()方法。与InputStream 和Reader类相似,抽象类OutputStream和Writer类是所有字节输出流
3、和字符输出流的父类,这两个类中都含有名为write()的抽象方法,用于写入单个字节或者字符的数据。,8.2 File类,1.File类的构造方法 File类有3个构造方法,用法如下: (1) File(String filename):构造一个File类对象,参数filename用来指定与该File类对象关联的文件名,该文件可以是已经存在的文件,也可以是不存在的文件,对于不存在的文件,可以用File的其他方法创建文件。Java把文件夹看成是特殊的文件,因此参数filename可以是路径名。,(2) File(String path, String filename):构造一个File类对象,参
4、数path用来指定与该对象关联的文件的路径,filename用来指定与该File类对象关联的文件名,filename可以包含路径。 (3) File(File path, String filename):构造一个File类对象,参数path用来指定与该对象关联的文件的路径(该路径用一个File类对象表示,而不是用字符串表示),filename用来指定与该File类对象关联的文件名,filename可以包含路径。,2.File类的其他方法 除了构造方法之外,File类有其他方法可以用来对文件进行进一步的操作,主要操作包括:获取文件名、获取文件的属性(是否可读、是否可写、文件大小、是否文件夹、是
5、否普通文件、是否隐藏、修改时间等)、判断文件是否存在、获取文件的路径、获取文件所属文件夹、创建文件夹、返回文件夹下的文件名。,8.3 字节流,8.3.1 InputStream 1InputStream类的read方法 InputStream类最重要的方法是读数据的read()的方法。read()方法的功能是逐字节地以二进制的原始方式读取数据,它有三种形式:,(1)public int read() throws IOException:从输入流的当前位置读取一个字节(8位)的二进制数据,然后将此数据无符号扩展为整型量(0255)后返回给方法调用者。如果输入流的当前位置没有数据,则返回-1,表
6、明输入流结束。 (2)public int read(byte b) throws IOException:从输入流的当前位置处连续读取多个字节保存在参数指定的字节数组b中,同时返回所读到的字节的数目。,(3)public int read(byte b, int off,int len) throws IOException:从输入流的当前位置处连续读取多个字节保存在参数指定的字节数组b中,同时返回所读到的字节的数目。参数off和len指定所要填入的数组的范围,其中,off指定read方法把数据存放在字节数组b中的什么地方,len指定将读取的最大字节数。,2.InputStream类的其他方
7、法 除了读数据之外,还需要对流进行标记、关闭、重置等操作,InputStream的其他方法完成这些功能。 (1)public void close() throws IOException:关闭流。完成流操作之后,必须关闭这个流,close方法用来完成关闭流的操作。如果有一个流所组成的栈,使用过滤器流,就关闭栈顶部的流。这个关闭操作会关闭其余的流。,(2)public int available():报告立刻可以从流中读取的字节数。在调用available方法之后的实际读操作可能返回更多的字节数。 (3)public long skip(long):丢弃流中指定数目的字符,使位置指针从当前位置
8、向后跳过指定数目的字节。 (4)public boolean markSupported():判断是否支持标记操作。,(5)public void mark(int):在当前位置指针处做一个标记。 (6)public void reset(int):将位置指针返回到标记的位置。,8.3.2 OutputSream 1.OutputStream类的write方法 OutputStream类的重要方法是write(),它的功能是将字节写入流中,write()方法有三种形式: (1)public void write(int b) throws IOException:将参数b的低位字节写入到输出流
9、。 (2)public void write(byte b) throws IOException:将字节数组b中的全部字节顺序写入到输出流。 (3) public void write(byte b, int off, int len) throws IOException:将字节数组b中从off开始的len个字节写入到流中。,2.OutputStream类的其他方法 输出流在写操作完成后需要关闭和刷新,OutputStream类的flush()及close()方法完成这些操作。,(1)public void close() throws IOException:关闭输出流。当完成写操作后,
10、close方法完成关闭输出流的操作。如果有一个流所组成的栈,就关闭栈顶部的流。这个关闭操作会关闭其余的流。当输出操作完毕后,应调用该方法来关闭输出流与外设的连接并释放所占用的系统资源。,(2)public void flush() throws IOException:刷新缓冲区的内容。对于缓冲流式输出来说,write()方法所写的数据并没有直接传到与输出流相连的外部设备上,而是暂时存放在流的缓冲区中,等到缓冲区中的数据积累到一定的数量,再统一执行一次向外部设备的写操作把它们全部写到外部设备上。这样处理可以降低计算机对外部设备的读写次数,提高系统的效率。但是在某些情况下,缓冲区中的数据不满时就
11、需要将它写到外部设备上,此时应使用强制清空缓冲区并执行外部设备写操作的flush()方法。可见,flush()方法允许强制执行写操作。,8.4 文件字节流,8.4.1 FileInputStream FileInputStream类有2个构造方法: 1)public FileInputStream(String name)throws FileNotFoundException:用给定的文件名name创建一个FileInputStream对象。 2)public FileInputStream(File file) throws FileNotFoundException:用给定的File对象
12、file创建FileInputStream对象。,8.4.2 FileOutputStream FileOutputStream类有2个构造方法: 1)public FileOutputStream(String name)throws FileNotFoundException:用给定的文件名name创建一个FileOutputStream对象。 2)public FileOutputStream(File file) throws FileNotFoundException:用给定的File对象类对象file创建FileOutputStream对象。,8.5 字符流,8.5.1 Reade
13、r类 1Reader类的read方法 Reader类的重要方法是read()方法,该方法有三种形式: (1)public int read() throws IOException:从输入流的当前位置读取一个字符,如果输入流的当前位置没有数据,则返回-1,表明流结束。 (2)public int read(char b) throws IOException:从输入流的当前位置处连续读取多个字符保存在参数指定的字符数组b中,同时返回所读到的字符的数目。,(3)public int read(char b, int off,int len) throws IOException:从输入流的当前位
14、置处连续读取多个字符保存在参数指定的字符数组b中,同时返回所读到的字符的数目。参数off和len指定所要填入的数组的范围,其中,off指定read方法把数据存放在字节数组b中的什么地方,len指定将读取的最大字节数。,2Reader类的其他方法 除读数据之外,还需要对字符流进行标记、关闭、重置等操作,Reader类的其他方法完成这些功能。 (1)public void close() throws IOException:关闭流。完成流操作之后,必须关闭这个流,close方法用来完成关闭流的操作。如果有一个流所组成的栈,使用过滤器流,就关闭栈顶部的流。这个关闭操作会关闭其余的流。 (2)pub
15、lic long skip(long):丢弃流中指定数目的字符,使位置指针从当前位置向后跳过指定数目的字符。 (3)public boolean markSupported():判断是否支持标记操作。,(4)public void mark(int):在当前位置指针处做一个标记。 (5)public void reset(int):将位置指针返回到标记的位置。 3FileReader类 Reader类在使用的时候主要使用FileReader类,用于字符文件的读操作,每次读取一个字符或一个字符数组。通常将FileReader类的对象视为一个以字符为基本单位的无格式的字符输入流。,FileRead
16、er类有2个构造方法。 (1)FileReader(String name)throws FileNotFoundException:用给定的文件名name创建一个FileReader 对象。 (2)FileReader (File file) throws FileNotFoundException:用File对象创建FileReader对象。,4BufferedReader类 (1)BufferedReader类的构造方法 BufferedReader类有2个构造方法: 1)public BufferedReader(Reader in):将字符输入流in转换成带缓冲的字符流,字符缓冲区大小为系统默认值。 2)public BufferedReader(Reader in,int sz):将字符输入流in转换成带缓冲的字符流,字符缓冲区大小为sz。,(2)BufferedReader类的readline方法 BufferedReader类的readLine()方法能够读取文本行,格式如下: public St