第11章输入输出课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第11章输入输出课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 11 输入输出 课件
- 资源描述:
-
1、第第11章章 输入输入/输出输出本章要点本章要点u 了解了解Java中流的概念中流的概念u 了解了解Java中输入输出流的分类中输入输出流的分类u 掌握文件输入输出流的使用方法掌握文件输入输出流的使用方法u 掌握带缓存的输入输出流的使用掌握带缓存的输入输出流的使用u 了解了解ZIP压缩输入输出流的应用压缩输入输出流的应用第第11章章 输入输入/输出输出主要内容主要内容11.1 输入输入/输出流输出流n通常程序需要通常程序需要从外部获取从外部获取/输出信息输出信息这个这个“外部外部”范围很广,包括诸如范围很广,包括诸如键盘、显键盘、显示器、文件示器、文件、磁盘、网络、另外一个程序等、磁盘、网络、
2、另外一个程序等“信息信息”也可以是任何类型的,例如一个对也可以是任何类型的,例如一个对象、字符串、图像、声音等象、字符串、图像、声音等n通过使用通过使用java.io包包中的中的输入输入/输出流类输出流类就可以就可以达到输入输出信息的目的达到输入输出信息的目的nJava所有的所有的I/O机制都是基于机制都是基于数据流数据流进行输进行输入输出,这些数据流表示了入输出,这些数据流表示了字符或者字节数字符或者字节数据据的流动序列。的流动序列。nJava的的I/O流流提供了读写数据的标准方法提供了读写数据的标准方法n任何任何Java中表示数据源的对象都会提供以中表示数据源的对象都会提供以数数据流的方式
3、据流的方式读写它的数据的方法。读写它的数据的方法。nJava.io是大多数面向数据流的输入是大多数面向数据流的输入/输出类输出类的主要软件包。的主要软件包。11.1 输入输入/输出流输出流n数据流数据流是一串连续不断的数据的集合。是一串连续不断的数据的集合。n数据写入程序数据写入程序可以是一段、一段地向数据流可以是一段、一段地向数据流管道中写入数据,这些数据段会按先后顺序管道中写入数据,这些数据段会按先后顺序形成一个长的数据流。形成一个长的数据流。n对数据读取程序来说,看不到数据流在写入对数据读取程序来说,看不到数据流在写入时的分段情况,每次可以读取其中的任意长时的分段情况,每次可以读取其中的
4、任意长度的数据,但度的数据,但只能先读取前面的数据后,再只能先读取前面的数据后,再读取后面的数据读取后面的数据。11.1 输入输入/输出流输出流n一组有序,有起点和终点的字节的数据序列。一组有序,有起点和终点的字节的数据序列。n包括输入流和输出流。包括输入流和输出流。11.1 输入输入/输出流输出流11.1.1 I/O流的概念流的概念 在在Java中将信息的输入输出过程抽象为中将信息的输入输出过程抽象为I/O流流n输入是指数据流入程序输入是指数据流入程序n输出是指数据从程序流出输出是指数据从程序流出一个流就是一个从源流向目的地的数据序列一个流就是一个从源流向目的地的数据序列IO流类一旦被创建就
5、会自动打开流类一旦被创建就会自动打开通过调用通过调用close方法方法,可以显式关闭任何一个,可以显式关闭任何一个流,如果流对象不再被引用,流,如果流对象不再被引用,Java的垃圾回的垃圾回收机制也会隐式地关闭它收机制也会隐式地关闭它11.1.1 I/O流的概念流的概念n输入流输入流为了从信息源获取信息,程序打开一个输为了从信息源获取信息,程序打开一个输入流,程序可从输入流读取信息入流,程序可从输入流读取信息11.1.1 I/O流的概念流的概念n输出流输出流当程序需要向目标位置写信息时,便需要当程序需要向目标位置写信息时,便需要打开一个输出流,程序通过输出流向这个打开一个输出流,程序通过输出流
6、向这个目标位置写信息目标位置写信息9对象对象源源?/目标目标?或两者或两者?disk file running program monitor keyboard Internet connection image scanner mouse BothBothDestinationSourceBothSourceSource11.1.1 I/O流的概念流的概念n源和目标的类型源和目标的类型n读写数据的方法读写数据的方法不论数据从哪来,到哪去,也不论数据不论数据从哪来,到哪去,也不论数据本身是何类型,读写数据的方法大体上本身是何类型,读写数据的方法大体上都是一样的都是一样的读读写写打开一个流打开一
7、个流读信息读信息关闭流关闭流打开一个流打开一个流写信息写信息关闭流关闭流11.1.1 I/O流的概念流的概念11.1.1 I/O流的概念流的概念n缓冲流缓冲流:为流配备一个缓冲区:为流配备一个缓冲区(buffer)缓冲区缓冲区就是一块存储区域,用来辅助与外部就是一块存储区域,用来辅助与外部设备的数据传输,从而提高数据的传输效率设备的数据传输,从而提高数据的传输效率在实现在实现写数据写数据时,先将这些数据时,先将这些数据写入流缓冲写入流缓冲区区,而并不直接将它们送入输出设备,流缓,而并不直接将它们送入输出设备,流缓冲区的数据量会被自动地跟踪,一旦发现冲区的数据量会被自动地跟踪,一旦发现缓缓冲区满
8、了冲区满了,就会将其中的数据,就会将其中的数据一次性传输一次性传输到到外部设备上,缓冲区变为空外部设备上,缓冲区变为空可以减少与外部设备打交道的次数可以减少与外部设备打交道的次数11.1.2 预定义的预定义的I/O流类概述流类概述n从流的方向划分从流的方向划分输入流输入流输出流输出流n从流的分工划分从流的分工划分节点流节点流处理流处理流n从流的内容划分从流的内容划分面向字符的流面向字符的流(字符流字符流)面向字节的流面向字节的流(二进制流二进制流)11.1.2 预定义的预定义的I/O流类概述流类概述njava.io包包的顶级层次结构的顶级层次结构面向字符的流:专门用于字符数据面向字符的流:专门
9、用于字符数据面向字节的流:用于一般目的面向字节的流:用于一般目的1)面向字符的流面向字符的流n面向字符的流面向字符的流针对针对字符数据的特点字符数据的特点进行过进行过优化优化,提,提供一些面向字符的有用特性供一些面向字符的有用特性源或目标通常是源或目标通常是文本文件文本文件n面向字符的抽象类面向字符的抽象类Reader和和Writerjava.io包中所有包中所有字符流字符流的的抽象基类抽象基类Reader提供了提供了输入输入字符的字符的APIWriter提供了提供了输出输出字符的字符的API多数程序使用这两个抽象类的一系列子类多数程序使用这两个抽象类的一系列子类来读入来读入/写出文本信息写出
10、文本信息1)面向字符的流面向字符的流阴影部分为节点流阴影部分为节点流1)面向字符的流面向字符的流n数据源或目标中含有非字符数据,必须用字数据源或目标中含有非字符数据,必须用字节流来输入节流来输入/输出输出n通常被用来读写诸如图片、声音之类的二进通常被用来读写诸如图片、声音之类的二进制数据制数据n绝大多数数据是被存储为二进制文件的,绝大多数数据是被存储为二进制文件的,世世界上的文本文件大约只能占到界上的文本文件大约只能占到2,通常二,通常二进制文件要比含有相同数据量的文本文件小进制文件要比含有相同数据量的文本文件小得多得多2)面向字节的流面向字节的流nInputStream和和OutputStr
11、eam是用来处理是用来处理8位字节流位字节流的抽象基类,程序使的抽象基类,程序使用这两个类的子类来读写用这两个类的子类来读写8位的字节信息位的字节信息分为两部分分为两部分n节点流节点流n处理流处理流2)面向字节的流面向字节的流阴影部分为节点流阴影部分为节点流2)面向字节的流面向字节的流3)标准输入输出标准输入输出n标准输入输出流对象,标准输入输出流对象,System类静态成员变量类静态成员变量System.in:InputStream类型的,代表标类型的,代表标准输入流,这个流是已经打开了的,准输入流,这个流是已经打开了的,默认状默认状态对应于键盘输入。态对应于键盘输入。System.out:
12、PrintStream类型的,代表标类型的,代表标准输出流,准输出流,默认状态对应于屏幕输出默认状态对应于屏幕输出System.err:PrintStream类型的,代表标类型的,代表标准错误信息输出流,准错误信息输出流,默认状态对应屏幕输出默认状态对应屏幕输出public class Echo public static void main(String args)throws IOException BufferedReader in=new BufferedReader(new InputStreamReader(System.in);String s;while(s=in.readLi
13、ne().length()!=0)System.out.println(s);运行结果运行结果Hello!Hello!nSystem.in程序启动时由程序启动时由Java系统自动创建的流对象系统自动创建的流对象,它是原始的字节流,它是原始的字节流,不能直接从中读取字符不能直接从中读取字符,需要对其进行进一步的处理需要对其进行进一步的处理nInputStreamReader(System.in)以以System.in为参数创建一个为参数创建一个InputStreamReader流对象流对象,相当于字节流和字符流之间的一座桥,相当于字节流和字符流之间的一座桥梁,读取字节并将其转换为字符梁,读取字节
14、并将其转换为字符nBufferedReader in对对InputStreamReader处理后的信息进行缓冲,处理后的信息进行缓冲,以提高效率以提高效率4)处理流处理流n不直接与数据源或目标相连,而是不直接与数据源或目标相连,而是基于另一个基于另一个流来构造流来构造n从流读写数据的同时对数据进行处理从流读写数据的同时对数据进行处理n实例中的实例中的InputStreamReader和和BufferedReader都都属于处理流属于处理流InputStreamReader读取字节并转换为字符读取字节并转换为字符BufferedReader对另一个流产生的数据进行对另一个流产生的数据进行缓冲缓冲
15、用一行表达式实现:用一行表达式实现:BufferedReader stdin=new BufferedReader (new InputStreamReader(System.in);4)处理流处理流5)I/O异常异常n多数多数IO方法在遇到错误时会抛出异常方法在遇到错误时会抛出异常,因此调,因此调用这些方法时必须用这些方法时必须在方法头声明抛出在方法头声明抛出IOException异常异常或者在或者在try块中执行块中执行IO,然后捕获,然后捕获IOException 11.1.3 File 类类 n表示磁盘文件信息表示磁盘文件信息n定义了一些与平台无关的方法来操纵文件定义了一些与平台无关的
16、方法来操纵文件创建、删除文件创建、删除文件重命名文件重命名文件判断文件的读写权限及是否存在判断文件的读写权限及是否存在设置和查询文件的最近修改时间等设置和查询文件的最近修改时间等n构造文件流可以使用构造文件流可以使用File类的对象作为参数类的对象作为参数public File(String name)指定与 File 对象关联的文件或目录的名称,name 可以包含路径信息及文件或目录名 public File(String pathToName,String name)使用参数 pathToName(绝对路径或相对路径)来定位参数 name 所指定的文件或目录 public File(Fil
17、e directory,String name)使用现有的File对象directory(绝对路径或相对路径)来定位参数 name 所指定的文件或目录 public File(URI rui)使用给定的统一资源定位符(uniform resource identifier,URI)来定位文件 11.1.3 File 类类 boolean canRead()如果文件可读,则返回真,否则返回假 boolean canWrite()如果文件可写,则返回真,否则返回假 boolean exists()如果File构造函数参数所指定的名称是指定路径中的文件或目录,则返回真,否则返回假 boolean c
18、reateNewFile()如果文件不存在,则创建这个名字的空文件,并返回真,如果文件存在,则返回假 boolean isFile()如果 File 构造函数参数所指定的名称是一个文件,则返回真,否则返回假 boolean isDirectory()如果 File 构造函数参数所指定的名称是一个目录,则返回真,否则返回假 boolean isAbsolute()如果File构造函数参数所指定的名称是一个文件或目录的绝对路径,则返回真,否则返回假 boolean delete()删除文件或目录,如果是目录,必须是空目录才能删除成功,删除成功返回真,否则返回假 11.1.3 File 类类 pub
19、lic static void main(String args)throws IOException File f=new File(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,所,所以第一次运行将删除这个文件以第一次运行将删除这个文件第二次运行则又创建了一个此名的空文件第二次运行则又创
20、建了一个此名的空文件n分析分析在试图打开文件之前,可以使用在试图打开文件之前,可以使用File类的类的isFile方法来确定方法来确定File对象是否代表一个文件对象是否代表一个文件而非目录)而非目录)还可通过还可通过exists方法判断同名文件或路径是否方法判断同名文件或路径是否存在,进而采取正确的方法,以免造成误操作存在,进而采取正确的方法,以免造成误操作31 11.1.3 File 类类 11.2 文件读写文件读写n11.2.1 写文本文件写文本文件n11.2.2 读文本文件读文本文件n11.2.3 写二进制文件写二进制文件n11.2.4 读二进制文件读二进制文件n11.2.5 处理压缩
21、文件处理压缩文件n11.2.6 对象序列化对象序列化11.2.1 写文本文件写文本文件 n本节知识点本节知识点FileWriter类类 创建一个磁盘文件创建一个磁盘文件 关闭一个磁盘文件关闭一个磁盘文件 write()方法方法捕获捕获I/O异常异常 BufferedWriter 类类1)FILEWRITER类类(字符输出流类字符输出流类)n构造方法构造方法FileWriter fw=new FileWriter(String fileName);创建字符输出流类对象和已存在的文件相关联。创建字符输出流类对象和已存在的文件相关联。文件不存在,则创建。文件不存在,则创建。FileWriter fw
22、=new FileWriter(String fileName,boolean append);创建字符输出流类对象和已存在的文件相关联,创建字符输出流类对象和已存在的文件相关联,并设置该该流对文件的操作是否为续写并设置该该流对文件的操作是否为续写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刷新该流
23、中的缓冲。刷新该流中的缓冲。viod close()n关闭此流。关闭此流。11.2.1 写文本文件写文本文件【例例】在在C盘根目录创建文本文件盘根目录创建文本文件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.clos
24、e();n每次运行这个程序,都将删除已经存在每次运行这个程序,都将删除已经存在的的”Hello.txt”文件,创建一个新的同名文件文件,创建一个新的同名文件nFileWriter的构造方法有五个,本例是通过的构造方法有五个,本例是通过一个字符串指定文件名来创建一个字符串指定文件名来创建nFileWriter类的类的write方法向文件中写入字符方法向文件中写入字符nclose方法清空流里的内容并关闭它。方法清空流里的内容并关闭它。如果如果不调用该方法,可能系统还没有完成所有数不调用该方法,可能系统还没有完成所有数据的写操作,程序就结束了据的写操作,程序就结束了11.2.1 写文本文件写文本文件
25、-实例说明实例说明nWriter类的流可实现内部格式到外部磁盘文类的流可实现内部格式到外部磁盘文件格式的转换件格式的转换“Hello.txt”是一个普通的是一个普通的ASCII码文本文件,码文本文件,英文字符占一个字节,中文字符占两个字节英文字符占一个字节,中文字符占两个字节Java程序中的字符串则是每个字符占两个字程序中的字符串则是每个字符占两个字节的,采用节的,采用Unicode编码编码11.2.1 写文本文件写文本文件-实例说明实例说明public static void main(String args)String fileName=D:Hello.txt;try /将所有IO操作放
展开阅读全文