【教学课件】第11章输入输出.ppt
《【教学课件】第11章输入输出.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第11章输入输出.ppt(83页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第11章章 输入输入/输出输出本章要点本章要点u了解了解Java中流的概念中流的概念u了解了解Java中输入输出流的分类中输入输出流的分类u掌握文件输入输出流的使用方法掌握文件输入输出流的使用方法u掌握带缓存的输入输出流的使用掌握带缓存的输入输出流的使用u了解了解ZIP压缩输入输出流的应用压缩输入输出流的应用第第11章章 输入输入/输出输出n n11.1 输入输入/输出流输出流n n11.2 文件读写文件读写主要内容主要内容nJava所有的所有的I/O机制都是基于机制都是基于数据流数据流进行输进行输入输出,这些数据流表示了入输出,这些数据流表示了字符或者字节数字符或者字节数据据的流动序列。的
2、流动序列。nJava的的I/O流流提供了读写数据的标准方法提供了读写数据的标准方法n任何任何Java中表示数据源的对象都会提供以中表示数据源的对象都会提供以数数据流的方式据流的方式读写它的数据的方法。读写它的数据的方法。nJava.io是大多数面向数据流的输入是大多数面向数据流的输入/输出类输出类的主要软件包。的主要软件包。11.1 输入输入/输出流输出流n数据流数据流是一串连续不断的数据的集合。是一串连续不断的数据的集合。n数据写入程序数据写入程序可以是一段、一段地向数据流可以是一段、一段地向数据流管道中写入数据,这些数据段会按先后顺序管道中写入数据,这些数据段会按先后顺序形成一个长的数据流
3、。形成一个长的数据流。n对数据读取程序来说,看不到数据流在写入对数据读取程序来说,看不到数据流在写入时的分段情况,每次可以读取其中的任意长时的分段情况,每次可以读取其中的任意长度的数据,但度的数据,但只能先读取前面的数据后,再只能先读取前面的数据后,再读取后面的数据读取后面的数据。11.1 输入输入/输出流输出流n一组有序,有起点和终点的字节的数据序列。一组有序,有起点和终点的字节的数据序列。n包括输入流和输出流。包括输入流和输出流。11.1 输入输入/输出流输出流11.1.1 I/O流的概念流的概念 在在Java中将信息的输入输出过程抽象为中将信息的输入输出过程抽象为I/O流流n输入是指数据
4、流入程序输入是指数据流入程序n输出是指数据从程序流出输出是指数据从程序流出一个流就是一个从源流向目的地的数据序列一个流就是一个从源流向目的地的数据序列IO流类一旦被创建就会自动打开流类一旦被创建就会自动打开通过调用通过调用close方法方法,可以显式关闭任何一个,可以显式关闭任何一个流,如果流对象不再被引用,流,如果流对象不再被引用,Java的垃圾回的垃圾回收机制也会隐式地关闭它收机制也会隐式地关闭它11.1.1 I/O流的概念流的概念n输入流输入流为了从信息源获取信息,程序打开一个输为了从信息源获取信息,程序打开一个输入流,程序可从输入流读取信息入流,程序可从输入流读取信息11.1.1 I/
5、O流的概念流的概念n输出流输出流当程序需要向目标位置写信息时,便需要当程序需要向目标位置写信息时,便需要打开一个输出流,程序通过输出流向这个打开一个输出流,程序通过输出流向这个目标位置写信息目标位置写信息9对象对象源源?/目标目标?或两者或两者?diskfilerunningprogrammonitorkeyboardInternetconnectionimagescannermouseBothBothDestinationSourceBothSourceSource11.1.1 I/O流的概念流的概念n源和目标的类型源和目标的类型n读写数据的方法读写数据的方法不论数据从哪来,到哪去,也不论数
6、据不论数据从哪来,到哪去,也不论数据本身是何类型,读写数据的方法大体上本身是何类型,读写数据的方法大体上都是一样的都是一样的读读写写打开一个流打开一个流读信息读信息关闭流关闭流打开一个流打开一个流写信息写信息关闭流关闭流11.1.1 I/O流的概念流的概念11.1.1 I/O流的概念流的概念n缓冲流缓冲流:为流配备一个缓冲区:为流配备一个缓冲区(buffer)缓冲区缓冲区就是一块存储区域,用来辅助与外部就是一块存储区域,用来辅助与外部设备的数据传输,从而提高数据的传输效率设备的数据传输,从而提高数据的传输效率在实现在实现写数据写数据时,先将这些数据时,先将这些数据写入流缓冲写入流缓冲区区,而并
7、不直接将它们送入输出设备,流缓,而并不直接将它们送入输出设备,流缓冲区的数据量会被自动地跟踪,一旦发现冲区的数据量会被自动地跟踪,一旦发现缓缓冲区满了冲区满了,就会将其中的数据,就会将其中的数据一次性传输一次性传输到到外部设备上,缓冲区变为空外部设备上,缓冲区变为空可以减少与外部设备打交道的次数可以减少与外部设备打交道的次数11.1.2 预定义的预定义的I/O流类概述流类概述n从流的方向划分从流的方向划分输入流输入流输出流输出流n从流的分工划分从流的分工划分节点流节点流处理流处理流n从流的内容划分从流的内容划分面向字符的流面向字符的流(字符流字符流)面向字节的流面向字节的流(二进制流二进制流)
8、11.1.2 预定义的预定义的I/O流类概述流类概述njava.io包包的顶级层次结构的顶级层次结构面向字符的流:专门用于字符数据面向字符的流:专门用于字符数据面向字节的流:用于一般目的面向字节的流:用于一般目的1)面向字符的流面向字符的流n面向字符的流面向字符的流针对针对字符数据的特点字符数据的特点进行过进行过优化优化,提,提供一些面向字符的有用特性供一些面向字符的有用特性源或目标通常是源或目标通常是文本文件文本文件n面向字符的抽象类面向字符的抽象类Reader和和Writerjava.io包中所有包中所有字符流字符流的的抽象基类抽象基类Reader提供了提供了输入输入字符的字符的APIWr
9、iter提供了提供了输出输出字符的字符的API多数程序使用这两个抽象类的一系列子类多数程序使用这两个抽象类的一系列子类来读入来读入/写出文本信息写出文本信息1)面向字符的流面向字符的流阴影部分为节点流阴影部分为节点流1)面向字符的流面向字符的流n数据源或目标中含有非字符数据,必须用字数据源或目标中含有非字符数据,必须用字节流来输入节流来输入/输出输出n通常被用来读写诸如图片、声音之类的二进通常被用来读写诸如图片、声音之类的二进制数据制数据n绝大多数数据是被存储为二进制文件的,绝大多数数据是被存储为二进制文件的,世世界上的文本文件大约只能占到界上的文本文件大约只能占到2,通常二,通常二进制文件要
10、比含有相同数据量的文本文件小进制文件要比含有相同数据量的文本文件小得多得多2)面向字节的流面向字节的流nInputStream和和OutputStream是用来处理是用来处理8位字节流位字节流的抽象基类,程序使的抽象基类,程序使用这两个类的子类来读写用这两个类的子类来读写8位的字节信息位的字节信息分为两部分分为两部分n节点流节点流n处理流处理流2)面向字节的流面向字节的流阴影部分为节点流阴影部分为节点流2)面向字节的流面向字节的流3)标准输入输出标准输入输出n标准输入输出流对象,标准输入输出流对象,System类静态成员变量类静态成员变量System.in:InputStream类型的,代表标
11、类型的,代表标准输入流,这个流是已经打开了的,准输入流,这个流是已经打开了的,默认状默认状态对应于键盘输入。态对应于键盘输入。System.out:PrintStream类型的,代表标类型的,代表标准输出流,准输出流,默认状态对应于屏幕输出默认状态对应于屏幕输出System.err:PrintStream类型的,代表标类型的,代表标准错误信息输出流,准错误信息输出流,默认状态对应屏幕输出默认状态对应屏幕输出public class Echo public static void main(String args)throws IOException BufferedReader in=new
12、BufferedReader(new InputStreamReader(System.in);String s;while(s=in.readLine().length()!=0)System.out.println(s);运行结果运行结果Hello!Hello!nSystem.in程序启动时由程序启动时由Java系统自动创建的流对象系统自动创建的流对象,它是原始的字节流,它是原始的字节流,不能直接从中读取字符不能直接从中读取字符,需要对其进行进一步的处理需要对其进行进一步的处理nInputStreamReader(System.in)以以System.in为参数创建一个为参数创建一个Inp
13、utStreamReader流对象流对象,相当于字节流和字符流之间的一座桥,相当于字节流和字符流之间的一座桥梁,读取字节并将其转换为字符梁,读取字节并将其转换为字符nBufferedReader in对对InputStreamReader处理后的信息进行缓冲,处理后的信息进行缓冲,以提高效率以提高效率4)处理流处理流n不直接与数据源或目标相连,而是不直接与数据源或目标相连,而是基于另一个基于另一个流来构造流来构造n从流读写数据的同时对数据进行处理从流读写数据的同时对数据进行处理n实例中的实例中的InputStreamReader和和BufferedReader都都属于处理流属于处理流Input
14、StreamReader读取字节并转换为字符读取字节并转换为字符BufferedReader对另一个流产生的数据进行对另一个流产生的数据进行缓冲缓冲用一行表达式实现:用一行表达式实现:BufferedReader stdin=new BufferedReader (new InputStreamReader(System.in);4)处理流处理流5)I/O异常异常n多数多数IO方法在遇到错误时会抛出异常方法在遇到错误时会抛出异常,因此调,因此调用这些方法时必须用这些方法时必须在方法头声明抛出在方法头声明抛出IOException异常异常或者在或者在try块中执行块中执行IO,然后捕获,然后捕获
15、IOException 11.1.3 File 类类 n表示磁盘文件信息表示磁盘文件信息n定义了一些与平台无关的方法来操纵文件定义了一些与平台无关的方法来操纵文件创建、删除文件创建、删除文件重命名文件重命名文件判断文件的读写权限及是否存在判断文件的读写权限及是否存在设置和查询文件的最近修改时间等设置和查询文件的最近修改时间等n构造文件流可以使用构造文件流可以使用File类的对象作为参数类的对象作为参数 11.1.3 File 类类 11.1.3 File 类类 public static void main(String args)throws IOException File f=new F
16、ile(D:+File.separator+Hello.txt);if(f.exists()f.delete();else try f.createNewFile();catch(Exception e)System.out.println(e.getMessage();n运行结果运行结果因为在例因为在例11_2中已经创建了中已经创建了d:Hello.txt,所,所以第一次运行将删除这个文件以第一次运行将删除这个文件第二次运行则又创建了一个此名的空文件第二次运行则又创建了一个此名的空文件n分析分析在试图打开文件之前,可以使用在试图打开文件之前,可以使用File类的类的isFile方法来确定方法
17、来确定File对象是否代表一个文件而对象是否代表一个文件而非目录)非目录)还可通过还可通过exists方法判断同名文件或路径是否方法判断同名文件或路径是否存在,进而采取正确的方法,以免造成误操作存在,进而采取正确的方法,以免造成误操作31 11.1.3 File 类类 11.2 文件读写文件读写n11.2.1 写文本文件写文本文件n11.2.2 读文本文件读文本文件n11.2.3 写二进制文件写二进制文件n11.2.4 读二进制文件读二进制文件n11.2.5 处理压缩文件处理压缩文件n11.2.6 对象序列化对象序列化11.2.1 写文本文件写文本文件 n本节知识点本节知识点FileWrite
18、r类类 创建一个磁盘文件创建一个磁盘文件 关闭一个磁盘文件关闭一个磁盘文件 write()方法方法捕获捕获I/O异常异常 BufferedWriter 类类1)FileWriter类类(字符输出流类字符输出流类)n构造方法构造方法FileWriter fw=new FileWriter(String fileName);创建字符输出流类对象和已存在的文件相关联。创建字符输出流类对象和已存在的文件相关联。文件不存在,则创建。文件不存在,则创建。FileWriter fw=new FileWriter(String fileName,boolean append);创建字符输出流类对象和已存在的文
19、件相关联,创建字符输出流类对象和已存在的文件相关联,并设置该该流对文件的操作是否为续写并设置该该流对文件的操作是否为续写FileWriter fw=new FileWriter(C:demo.txt);FileWriter fw=new FileWriter(C:demo.txt,ture);1)FileWriter类类(字符输出流类字符输出流类)n主要方法主要方法void write(String str)n写入字符串。写入字符串。viod flush()n刷新该流中的缓冲。刷新该流中的缓冲。viod close()n关闭此流。关闭此流。11.2.1 写文本文件写文本文件【例例】在在C盘根目
20、录创建文本文件盘根目录创建文本文件Hello.txt,并往里写入若干行文本并往里写入若干行文本public static void main(String args)throws IOException String fileName=D:Hello.txt;FileWriter writer=new FileWriter(fileName);writer.write(Hello!n);writer.write(This is a filen);writer.close();n每次运行这个程序,都将删除已经存在的每次运行这个程序,都将删除已经存在的”Hello.txt”文件,创建一个新的同名文
21、件文件,创建一个新的同名文件nFileWriter的构造方法有五个,本例是通过的构造方法有五个,本例是通过一个字符串指定文件名来创建一个字符串指定文件名来创建nFileWriter类的类的write方法向文件中写入字符方法向文件中写入字符nclose方法清空流里的内容并关闭它。方法清空流里的内容并关闭它。如果如果不调用该方法,可能系统还没有完成所有数不调用该方法,可能系统还没有完成所有数据的写操作,程序就结束了据的写操作,程序就结束了11.2.1 写文本文件写文本文件-实例说明实例说明nWriter类的流可实现内部格式到外部磁盘文类的流可实现内部格式到外部磁盘文件格式的转换件格式的转换“Hel
22、lo.txt”是一个普通的是一个普通的ASCII码文本文码文本文件,英文字符占一个字节,中文字符占两个件,英文字符占一个字节,中文字符占两个字节字节Java程序中的字符串则是每个字符占两个字程序中的字符串则是每个字符占两个字节的,采用节的,采用Unicode编码编码11.2.1 写文本文件写文本文件-实例说明实例说明public static void main(String args)String fileName=D:Hello.txt;try /将所有IO操作放入try块中 FileWriter writer=new FileWriter(fileName,true);writer.wr
23、ite(Hello!n);writer.write(This is a text filen);writer.close();catch(IOException iox)System.out.println(Problem writing+fileName);n运行此程序,运行此程序,会发现在原文件内容后面又会发现在原文件内容后面又追加了重复的内容追加了重复的内容,这就是将构造方法的这就是将构造方法的第二个参数设为第二个参数设为true的效果的效果n如果将文件属性改为只读属性,再运行本如果将文件属性改为只读属性,再运行本程序,就会出现程序,就会出现IO错误,程序将转入错误,程序将转入catch
24、块中,给出出错信息块中,给出出错信息4011.2.1 写文本文件写文本文件n如果需要写入的内容很多,就应该使用更为高如果需要写入的内容很多,就应该使用更为高效的效的缓冲器流类缓冲器流类BufferedWriternFileWriter和和BufferedWriter类都用于输出字类都用于输出字符流,包含的方法几乎完全一样,但符流,包含的方法几乎完全一样,但BufferedWriter多提供了一个多提供了一个newLine()方法方法用于换行用于换行不同厂家生产的计算机不同厂家生产的计算机(IBM,Apple,VAX,Sun)对文字的换行方法不同对文字的换行方法不同。newLine()方法方法可
25、以输出在当前计算机上正确的换行符可以输出在当前计算机上正确的换行符2)BufferedWriter类类public static void main(String args)throws IOException String fileName=D:newHello.txt;BufferedWriter out=new BufferedWriter(new FileWriter(fileName);out.write(Hello!);out.newLine();out.write(This is another File);out.close();读文本文件读文本文件 n本节知识点本节知识点Re
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 11 输入输出
限制150内