【教学课件】第11章输入输出.ppt
《【教学课件】第11章输入输出.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第11章输入输出.ppt(83页珍藏版)》请在三一办公上搜索。
1、第11章 输入/输出,本章要点,了解Java中流的概念了解Java中输入输出流的分类掌握文件输入输出流的使用方法掌握带缓存的输入输出流的使用了解ZIP压缩输入输出流的应用,第11章 输入/输出,11.1 输入/输出流11.2 文件读写,主要内容,11.1 输入/输出流,通常程序需要从外部获取/输出信息这个“外部”范围很广,包括诸如键盘、显示器、文件、磁盘、网络、另外一个程序等“信息”也可以是任何类型的,例如一个对象、字符串、图像、声音等通过使用java.io包中的输入/输出流类就可以达到输入输出信息的目的,Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流
2、动序列。Java的I/O流提供了读写数据的标准方法任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。Java.io是大多数面向数据流的输入/输出类的主要软件包。,11.1 输入/输出流,数据流是一串连续不断的数据的集合。数据写入程序可以是一段、一段地向数据流管道中写入数据,这些数据段会按先后顺序形成一个长的数据流。对数据读取程序来说,看不到数据流在写入时的分段情况,每次可以读取其中的任意长度的数据,但只能先读取前面的数据后,再读取后面的数据。,11.1 输入/输出流,一组有序,有起点和终点的字节的数据序列。包括输入流和输出流。,11.1 输入/输出流,11.1.1 I/O
3、流的概念,在Java中将信息的输入输出过程抽象为I/O流输入是指数据流入程序输出是指数据从程序流出一个流就是一个从源流向目的地的数据序列IO流类一旦被创建就会自动打开通过调用close方法,可以显式关闭任何一个流,如果流对象不再被引用,Java的垃圾回收机制也会隐式地关闭它,11.1.1 I/O流的概念,输入流为了从信息源获取信息,程序打开一个输入流,程序可从输入流读取信息,11.1.1 I/O流的概念,输出流当程序需要向目标位置写信息时,便需要打开一个输出流,程序通过输出流向这个目标位置写信息,9,11.1.1 I/O流的概念,源和目标的类型,读写数据的方法不论数据从哪来,到哪去,也不论数据
4、本身是何类型,读写数据的方法大体上都是一样的,11.1.1 I/O流的概念,11.1.1 I/O流的概念,缓冲流:为流配备一个缓冲区(buffer)缓冲区就是一块存储区域,用来辅助与外部设备的数据传输,从而提高数据的传输效率在实现写数据时,先将这些数据写入流缓冲区,而并不直接将它们送入输出设备,流缓冲区的数据量会被自动地跟踪,一旦发现缓冲区满了,就会将其中的数据一次性传输到外部设备上,缓冲区变为空可以减少与外部设备打交道的次数,11.1.2 预定义的I/O流类概述,从流的方向划分输入流输出流从流的分工划分节点流处理流从流的内容划分面向字符的流(字符流)面向字节的流(二进制流),11.1.2 预
5、定义的I/O流类概述,java.io包的顶级层次结构面向字符的流:专门用于字符数据面向字节的流:用于一般目的,1)面向字符的流,面向字符的流针对字符数据的特点进行过优化,提供一些面向字符的有用特性源或目标通常是文本文件,面向字符的抽象类Reader和Writerjava.io包中所有字符流的抽象基类Reader提供了输入字符的APIWriter提供了输出字符的API多数程序使用这两个抽象类的一系列子类来读入/写出文本信息,1)面向字符的流,阴影部分为节点流,1)面向字符的流,数据源或目标中含有非字符数据,必须用字节流来输入/输出通常被用来读写诸如图片、声音之类的二进制数据绝大多数数据是被存储为
6、二进制文件的,世界上的文本文件大约只能占到2,通常二进制文件要比含有相同数据量的文本文件小得多,2)面向字节的流,InputStream和OutputStream是用来处理8位字节流的抽象基类,程序使用这两个类的子类来读写8位的字节信息分为两部分节点流处理流,2)面向字节的流,阴影部分为节点流,2)面向字节的流,3)标准输入输出,标准输入输出流对象,System类静态成员变量System.in:InputStream类型的,代表标准输入流,这个流是已经打开了的,默认状态对应于键盘输入。System.out:PrintStream类型的,代表标准输出流,默认状态对应于屏幕输出System.err
7、: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.readLine().length()!=0)System.out.println(s);,运行结果Hello!Hello!,System.in程序启动时由Java系统自动创建的流对象,它是原始的
8、字节流,不能直接从中读取字符,需要对其进行进一步的处理InputStreamReader(System.in)以System.in为参数创建一个InputStreamReader流对象,相当于字节流和字符流之间的一座桥梁,读取字节并将其转换为字符BufferedReader in对InputStreamReader处理后的信息进行缓冲,以提高效率,4)处理流,不直接与数据源或目标相连,而是基于另一个流来构造从流读写数据的同时对数据进行处理实例中的InputStreamReader和BufferedReader都属于处理流InputStreamReader读取字节并转换为字符BufferedRe
9、ader对另一个流产生的数据进行缓冲,用一行表达式实现:BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in);,4)处理流,5)I/O异常,多数IO方法在遇到错误时会抛出异常,因此调用这些方法时必须在方法头声明抛出IOException异常或者在try块中执行IO,然后捕获IOException,11.1.3 File 类,表示磁盘文件信息定义了一些与平台无关的方法来操纵文件创建、删除文件重命名文件判断文件的读写权限及是否存在设置和查询文件的最近修改时间等构造文件流可以使用File类的对象作为参数,11
10、.1.3 File 类,11.1.3 File 类,public 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();,运行结果因为在例11_2中已经创建了d:Hello.txt,所以第一次运行将删除这个文件第二次运行则又创建了一个此名的空文件分析在试图打开文
11、件之前,可以使用File类的isFile方法来确定File对象是否代表一个文件而非目录)还可通过exists方法判断同名文件或路径是否存在,进而采取正确的方法,以免造成误操作,31,11.1.3 File 类,11.2 文件读写,11.2.1 写文本文件11.2.2 读文本文件11.2.3 写二进制文件11.2.4 读二进制文件11.2.5 处理压缩文件11.2.6 对象序列化,11.2.1 写文本文件,本节知识点FileWriter类 创建一个磁盘文件 关闭一个磁盘文件 write()方法捕获I/O异常 BufferedWriter 类,1)FileWriter类(字符输出流类),构造方法F
12、ileWriter fw=new FileWriter(String fileName);创建字符输出流类对象和已存在的文件相关联。文件不存在,则创建。FileWriter fw=new FileWriter(String fileName,boolean append);创建字符输出流类对象和已存在的文件相关联,并设置该该流对文件的操作是否为续写,FileWriter fw=new FileWriter(C:demo.txt);,FileWriter fw=new FileWriter(C:demo.txt,ture);,1)FileWriter类(字符输出流类),主要方法void writ
13、e(String str)写入字符串。viod flush()刷新该流中的缓冲。viod close()关闭此流。,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.close();
14、,每次运行这个程序,都将删除已经存在的”Hello.txt”文件,创建一个新的同名文件FileWriter的构造方法有五个,本例是通过一个字符串指定文件名来创建FileWriter类的write方法向文件中写入字符close方法清空流里的内容并关闭它。如果不调用该方法,可能系统还没有完成所有数据的写操作,程序就结束了,11.2.1 写文本文件-实例说明,Writer类的流可实现内部格式到外部磁盘文件格式的转换“Hello.txt”是一个普通的ASCII码文本文件,英文字符占一个字节,中文字符占两个字节Java程序中的字符串则是每个字符占两个字节的,采用Unicode编码,11.2.1 写文本文
15、件-实例说明,public static void main(String args)String fileName=D:Hello.txt;try/将所有IO操作放入try块中 FileWriter writer=new FileWriter(fileName,true);writer.write(Hello!n);writer.write(This is a text filen);writer.close();catch(IOException iox)System.out.println(Problem writing+fileName);,运行此程序,会发现在原文件内容后面又追加了重
16、复的内容,这就是将构造方法的第二个参数设为true的效果如果将文件属性改为只读属性,再运行本程序,就会出现IO错误,程序将转入catch块中,给出出错信息,40,11.2.1 写文本文件,如果需要写入的内容很多,就应该使用更为高效的缓冲器流类BufferedWriterFileWriter和BufferedWriter类都用于输出字符流,包含的方法几乎完全一样,但BufferedWriter多提供了一个newLine()方法用于换行不同厂家生产的计算机(IBM,Apple,VAX,Sun)对文字的换行方法不同。newLine()方法可以输出在当前计算机上正确的换行符,2)BufferedWri
17、ter类,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();,读文本文件,本节知识点Reader FileReader BufferedReader和readLine(),43,FileReader类
18、从文本文件中读取字符继承自Reader抽象类的子类InputStreamReaderBufferedReader读文本文件的缓冲器类具有readLine()方法,可以对换行符进行鉴别,一行一行地读取输入流中的内容继承自Reader,读文本文件,文件输入方法:BufferedReader in=new BufferedReader(new FileReader(fileName);,读文本文件,public static void main(String args)String fileName=D:Hello.txt;String line;try BufferedReader in=new
19、BufferedReader(new FileReader(fileName);line=in.readLine();while(line!=null)System.out.println(line);line=in.readLine();in.close();catch(IOException iox)System.out.println(Problem+fileName);,FileReader对象创建后将打开文件,如果文件不存在,会抛出一个IOExceptionclose()方法为了操作系统可以更为有效地利用有限的资源,应该在读取完毕后,调用该方法,读文本文件,BufferedReade
20、r类的readLine()方法从一个面向字符的输入流中读取一行文本。如果其中不再有数据,返回nullReader类的read()方法也可用来判别文件结束。该方法返回的一个表示某个字符的int型整数,如果读到文件末尾,返回-1。因此可修改本例中读文件部分,读文本文件,int c;while(c=in.read()!=-1)System.out.print(char)c);,11.2.3 写二进制文件,本节知识点二进制文件 OutputStream FileOutputStream BufferedOutputStream DataOutputStream,原则上讲,所有文件都是由8位的字节组成的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 11 输入输出
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5657766.html