【文档说明】输入输出课件.ppt,共(82)页,891.500 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-3325.html
以下为本文档部分文字说明:
第11章输入/输出本章要点了解Java中流的概念了解Java中输入输出流的分类掌握文件输入输出流的使用方法掌握带缓存的输入输出流的使用了解ZIP压缩输入输出流的应用第1页,共83页。第11章输入/输出11.1输入/输出流
11.2文件读写主要内容第2页,共83页。Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法
。Java.io是大多数面向数据流的输入/输出类的主要软件包。11.1输入/输出流第4页,共83页。数据流是一串连续不断的数据的集合。数据写入程序可以是一段、一段地向数据流管道中写入数据,这些数据段会按先后顺序形成一个长的数据流。对数据读取程序来说,看不到数据流在写入时的分段情况,
每次可以读取其中的任意长度的数据,但只能先读取前面的数据后,再读取后面的数据。11.1输入/输出流第5页,共83页。一组有序,有起点和终点的字节的数据序列。包括输入流和输出流。11.1输入/输出流第
6页,共83页。11.1.1I/O流的概念在Java中将信息的输入输出过程抽象为I/O流输入是指数据流入程序输出是指数据从程序流出一个流就是一个从源流向目的地的数据序列IO流类一旦被创建就会自动打开通过调用close方法,可以显式关闭任何一个流,如果流对象不再
被引用,Java的垃圾回收机制也会隐式地关闭它第7页,共83页。11.1.1I/O流的概念输入流为了从信息源获取信息,程序打开一个输入流,程序可从输入流读取信息第8页,共83页。11.1.1I/O
流的概念输出流当程序需要向目标位置写信息时,便需要打开一个输出流,程序通过输出流向这个目标位置写信息9第9页,共83页。对象源?/目标?或两者?diskfilerunningprogrammonitorkeyboardInternetconnectionimagescannermouseBot
hBothDestinationSourceBothSourceSource11.1.1I/O流的概念源和目标的类型第10页,共83页。读写数据的方法不论数据从哪来,到哪去,也不论数据本身是何类型,读写数据的方法大体上都是一样的读写打开一个
流读信息关闭流打开一个流写信息关闭流11.1.1I/O流的概念第11页,共83页。11.1.1I/O流的概念缓冲流:为流配备一个缓冲区(buffer)缓冲区就是一块存储区域,用来辅助与外部设备的数据传输,从而提高数据的传输效率在实现写数据时,先将这些数据写入流缓冲区,而并不直接将它们送
入输出设备,流缓冲区的数据量会被自动地跟踪,一旦发现缓冲区满了,就会将其中的数据一次性传输到外部设备上,缓冲区变为空可以减少与外部设备打交道的次数第12页,共83页。11.1.2预定义的I/O流类概述从流的方向划分输入流输出流从流的分工划分节
点流处理流从流的内容划分面向字符的流(字符流)面向字节的流(二进制流)第13页,共83页。11.1.2预定义的I/O流类概述java.io包的顶级层次结构面向字符的流:专门用于字符数据面向字节的流:用于一般目的第14页,共83页。1)面向字符的流面向字符的流针对字
符数据的特点进行过优化,提供一些面向字符的有用特性源或目标通常是文本文件第15页,共83页。面向字符的抽象类——Reader和Writerjava.io包中所有字符流的抽象基类Reader提供了输入字符的APIWriter提供了输出字符的API多数
程序使用这两个抽象类的一系列子类来读入/写出文本信息1)面向字符的流第16页,共83页。阴影部分为节点流1)面向字符的流第17页,共83页。数据源或目标中含有非字符数据,必须用字节流来输入/输出通常被用来读写诸如图片、声音之类的二进制数据绝大多数数据是被存储为二进制文件的,世界
上的文本文件大约只能占到2%,通常二进制文件要比含有相同数据量的文本文件小得多2)面向字节的流第18页,共83页。InputStream和OutputStream是用来处理8位字节流的抽象基类,程序使用这两
个类的子类来读写8位的字节信息分为两部分节点流处理流2)面向字节的流第19页,共83页。阴影部分为节点流2)面向字节的流第20页,共83页。3)标准输入输出标准输入输出流对象,System类静态成员变量System.in:InputStream类型的,代表标准输入流,这
个流是已经打开了的,默认状态对应于键盘输入。System.out:PrintStream类型的,代表标准输出流,默认状态对应于屏幕输出System.err:PrintStream类型的,代表标准错误信息
输出流,默认状态对应屏幕输出第21页,共83页。publicclassEcho{publicstaticvoidmain(String[]args)throwsIOException{BufferedReaderin=newBufferedReader(newInputStre
amReader(System.in));Strings;while((s=in.readLine()).length()!=0)System.out.println(s);}}运行结果Hello!Hello!第22页,共83页。System.in程序启动时由Java系统自动创建的流对象,
它是原始的字节流,不能直接从中读取字符,需要对其进行进一步的处理InputStreamReader(System.in)以System.in为参数创建一个InputStreamReader流对象,相当于字节流和字符流之间的一座桥梁,读取字节并将其转换为字符Bu
fferedReaderin对InputStreamReader处理后的信息进行缓冲,以提高效率第23页,共83页。4)处理流不直接与数据源或目标相连,而是基于另一个流来构造从流读写数据的同时对
数据进行处理实例中的InputStreamReader和BufferedReader都属于处理流InputStreamReader读取字节并转换为字符BufferedReader对另一个流产生的数据进行缓冲第24页,共83页。用一行表达式实现:BufferedReaderstdin=newB
ufferedReader(newInputStreamReader(System.in));4)处理流第25页,共83页。5)I/O异常多数IO方法在遇到错误时会抛出异常,因此调用这些方法时必须在方法头声明抛
出IOException异常或者在try块中执行IO,然后捕获IOException第26页,共83页。11.1.3File类表示磁盘文件信息定义了一些与平台无关的方法来操纵文件创建、删除文件重命名文件
判断文件的读写权限及是否存在设置和查询文件的最近修改时间等构造文件流可以使用File类的对象作为参数第27页,共83页。publicFile(Stringname)指定与File对象关联的文件或目录的名称,name可以包含路
径信息及文件或目录名publicFile(StringpathToName,Stringname)使用参数pathToName(绝对路径或相对路径)来定位参数name所指定的文件或目录publicFile(Filedirectory,Stringname)
使用现有的File对象directory(绝对路径或相对路径)来定位参数name所指定的文件或目录publicFile(URIrui)使用给定的统一资源定位符(uniformresourceidentifier,URI)来定位文件11.1.3File类第28页,共83页。booleancanRe
ad()如果文件可读,则返回真,否则返回假booleancanWrite()如果文件可写,则返回真,否则返回假booleanexists()如果File构造函数参数所指定的名称是指定路径中的文件或目录,则返回真,
否则返回假booleancreateNewFile()如果文件不存在,则创建这个名字的空文件,并返回真,如果文件存在,则返回假booleanisFile()如果File构造函数参数所指定的名称是一个文件,则返回真,否
则返回假booleanisDirectory()如果File构造函数参数所指定的名称是一个目录,则返回真,否则返回假booleanisAbsolute()如果File构造函数参数所指定的名称是一个文件或目录的绝对路径,则返回真,否则返回假boole
andelete()删除文件或目录,如果是目录,必须是空目录才能删除成功,删除成功返回真,否则返回假11.1.3File类第29页,共83页。publicstaticvoidmain(String[]args)throws
IOException{Filef=newFile("D:"+File.separator+"Hello.txt");if(f.exists())f.delete();elsetry{f.createNewFile(
);}catch(Exceptione){System.out.println(e.getMessage());}}第30页,共83页。运行结果因为在例11_2中已经创建了d:\Hello.txt,所以第一次运行将删除这个文件第二次运行则又创建了一个此名的空文件
分析在试图打开文件之前,可以使用File类的isFile方法来确定File对象是否代表一个文件而非目录)还可通过exists方法判断同名文件或路径是否存在,进而采取正确的方法,以免造成误操作3111.1.3File类第
31页,共83页。11.2文件读写11.2.1写文本文件11.2.2读文本文件11.2.3写二进制文件11.2.4读二进制文件11.2.5处理压缩文件11.2.6对象序列化第32页,共83页。11.2.1写文本文件本节知识点FileWriter类创建一个磁盘文件关闭一个磁盘
文件write()方法捕获I/O异常BufferedWriter类第33页,共83页。1)FileWriter类(字符输出流类)构造方法FileWriterfw=newFileWriter(StringfileName);创建字符输出流类对象和已存在的文件相关联。文件不
存在,则创建。FileWriterfw=newFileWriter(StringfileName,booleanappend);创建字符输出流类对象和已存在的文件相关联,并设置该该流对文件的操作是否为续写FileWriterfw=newFileWriter("C:\\demo.txt");Fi
leWriterfw=newFileWriter("C:\\demo.txt",ture);第34页,共83页。1)FileWriter类(字符输出流类)主要方法voidwrite(Stringstr)写入字符串。viodflush()刷新该流中的
缓冲。viodclose()关闭此流。第35页,共83页。11.2.1写文本文件【例】在C盘根目录创建文本文件Hello.txt,并往里写入若干行文本publicstaticvoidmain(String[]args)throwsIOException{Stri
ngfileName="D:\\Hello.txt";FileWriterwriter=newFileWriter(fileName);writer.write("Hello!\n");writer.write("Thisisafile\n
");writer.close();}第36页,共83页。每次运行这个程序,都将删除已经存在的”Hello.txt”文件,创建一个新的同名文件FileWriter的构造方法有五个,本例是通过一个字符串指定文件名来创建FileWriter类的write方法向文件
中写入字符close方法清空流里的内容并关闭它。如果不调用该方法,可能系统还没有完成所有数据的写操作,程序就结束了11.2.1写文本文件--实例说明第37页,共83页。Writer类的流可实现内部格式到外部磁盘文件格式的转换“Hello.txt”是一个普通的ASCII
码文本文件,英文字符占一个字节,中文字符占两个字节Java程序中的字符串则是每个字符占两个字节的,采用Unicode编码11.2.1写文本文件--实例说明第38页,共83页。publicstaticvoidmain(String[]args){StringfileName="D:\\
Hello.txt";try{//将所有IO操作放入try块中FileWriterwriter=newFileWriter(fileName,true);writer.write("Hello!\n");writer.write("Thisisate
xtfile\n");writer.close();}catch(IOExceptioniox){System.out.println("Problemwriting"+fileName);}}第39页,共83页。运行此程序,会发现在原文件内容后面又追加了重复的内容,这就是将
构造方法的第二个参数设为true的效果如果将文件属性改为只读属性,再运行本程序,就会出现IO错误,程序将转入catch块中,给出出错信息4011.2.1写文本文件第40页,共83页。如果需要写入的
内容很多,就应该使用更为高效的缓冲器流类BufferedWriterFileWriter和BufferedWriter类都用于输出字符流,包含的方法几乎完全一样,但BufferedWriter多提供了一个newLine()方法用于换行不同
厂家生产的计算机(IBM,Apple,VAX,Sun)对文字的换行方法不同。newLine()方法可以输出在当前计算机上正确的换行符2)BufferedWriter类第41页,共83页。publicstaticv
oidmain(String[]args)throwsIOException{StringfileName="D:\\newHello.txt";BufferedWriterout=newBufferedWriter(newFileWri
ter(fileName));out.write("Hello!");out.newLine();out.write("ThisisanotherFile");out.close();}第42页,共83页。11.2.2读文本文件本节知识点
ReaderFileReaderBufferedReader和readLine()43第43页,共83页。FileReader类从文本文件中读取字符继承自Reader抽象类的子类InputStreamReade
rBufferedReader读文本文件的缓冲器类具有readLine()方法,可以对换行符进行鉴别,一行一行地读取输入流中的内容继承自Reader11.2.2读文本文件第44页,共83页。文件输入方法:BufferedReaderin=newBufferedReader(new
FileReader(fileName));11.2.2读文本文件第45页,共83页。publicstaticvoidmain(String[]args){StringfileName="D:\\Hello.txt";Stringline;try{Buffered
Readerin=newBufferedReader(newFileReader(fileName));line=in.readLine();while(line!=null){System.out.println(line);line=in.readLine
();}in.close();}catch(IOExceptioniox){System.out.println("Problem"+fileName);}}第46页,共83页。FileReader对象创建后将打开文件,如果文件不存
在,会抛出一个IOExceptionclose()方法为了操作系统可以更为有效地利用有限的资源,应该在读取完毕后,调用该方法11.2.2读文本文件第47页,共83页。BufferedReader类的r
eadLine()方法从一个面向字符的输入流中读取一行文本。如果其中不再有数据,返回nullReader类的read()方法也可用来判别文件结束。该方法返回的一个表示某个字符的int型整数,如果读到文件末尾,返回-1。因此可修改本例中读文件部分11.
2.2读文本文件intc;while((c=in.read())!=-1)Systemoutprint((char)c)第48页,共83页。11.2.3写二进制文件本节知识点二进制文件OutputStreamFileOutputStreamBufferedOutputStrea
mDataOutputStream第49页,共83页。原则上讲,所有文件都是由8位的字节组成的如果文件字节中的内容应被解释为字符,则文件被称为文本文件;如果被解释为其它含义,则文件被称为二进制文件例如文字处理程序,字处理软件Word产生的do
c文件中,数据要被解释为字体、格式、图形和其他非字符信息。因此,这样的文件是二进制文件,不能用Reader流正确读取11.2.3写二进制文件第50页,共83页。为什么需要二进制文件输入输出更快比文本文件小很多有些数据不容易被表示为字符
11.2.3写二进制文件第51页,共83页。1)抽象类OutputStream提供了3个write方法来做数据的输出publicvoidwrite(byteb[])将参数b中的字节写到输出流publicvoidwrite(byteb[],intoff,intlen)将b从偏移量off开始l
en个字节写到输出流publicabstractvoidwrite(intb)先将int转换为byte类型,把低字节写入输出流第52页,共83页。1)抽象类OutputStream主要的子类第53页,共83页
。派生类FileOutputStream作用:用来处理以文件作为数据输出目的数据流;或者说是从内存区读数据入文件FileOutputStream(Filefile)创建一个向指定File对象表示的文件中写入数据的文件输出流。File
OutputStream(Stringname)创建一个向具有指定名称的文件中写入数据的输出文件流。1)抽象类OutputStream第54页,共83页。派生类FileOutputStream创建一个文件流对象:FileOutputStream
out=newFileOutputStream("d:/write.txt");Filef=newFile(“d:/write.txt");FileOutputStreamout=newFileOutputStream(f);1)抽象类OutputStream使用键盘输入一段文章,将文
章保存在文件write.txt中第55页,共83页。publicstaticvoidmain(Stringargs[])throwsIOException{try{System.out.println("pleaseInputfromKey
board");intcount,n=512;bytebuffer[]=newbyte[n];count=System.in.read(buffer);FileOutputStreamwf=newFileOutputStream("d:/write.txt");wf.wri
te(buffer,0,count);wf.close();System.out.println("Savetothewrite.txt");}catch(IOExceptionIOe){System.out.println("FileWriteError!");}}第56页,共83页。
派生类DataOutputStream数据输出流允许应用程序以适当方式将基本Java数据类型写入输出流中。然后应用程序可以使用数据输入流将数据读入。具有写各种基本数据类型的方法将数据写到另一个输出流在所有计算机平台上使用同样的数据格
式其中size方法,可作为计数器,统计写入的字节数1)抽象类OutputStream第57页,共83页。名称说明publicDataOutputStream(OutputStreamout)构造函数,参数为一个OutputStream对象作为其底层的
输出对象protectedintwritten私有属性,代表当前已写出的字节数publicvoidflush()冲刷此数据流,使流内的数据都被写出publicfinalintsize()返回私有变量written的值,即已经写出的字节数publicvoidwrite(intb)向底层输出
流输出int变量的低八位。执行后,记录写入字节数的计数器加1publicfinalvoidwriteBoolean(booleanb)写出一个布尔数,true为1,false为0,执行后计数器增加1publicfinalvoidwriteByte(intb)将int参
数的低八位写入,舍弃高24位,计数器增加111.2.3写二进制文件第58页,共83页。publicvoidwriteBytes(Strings)字符串中的每个字符被丢掉高八位写入流中,计数器增加写入的字节数,即字符个数publicfinalvoidwrite
Char(intc)将16-bit字符写入流中,高位在前,计数器增加2publicvoidwriteDouble(doublev)写双精度数,计数器增加8publicvoidwriteFloat(floatf)写单精度数,计数器增加4publicvoidwriteInt(intI)写整数,
计数器增加4publicvoidwriteLong(longl)写长整数,计数器增加8publicfinalvoidwriteShort(ints)写短整数,计数器增加211.2.3写二进制文件第59页,共83页。publicstaticvoidmain(String[]args){
StringfileName="d:/data1.dat";intvalue0=255,value1=0,value2=-1;try{DataOutputStreamout=newDataOutputStream(newFileOutputStream(f
ileName));out.writeInt(value0);out.writeInt(value1);out.writeInt(value2);out.close();}catch(IOExceptioniox){System.ou
t.println("Problemwriting");}}第60页,共83页。说明FileOutputStream类的构造方法负责打开文件“data1.dat”用于写数据FileOutputStream类的对象与DataOutputStream对象连接,写
基本类型的数据11.2.3写二进制文件第61页,共83页。运行结果运行程序后,在D盘生成数据文件data1.dat用写字板打开没有任何显示用二进制查看器打开查看其二进制信息,内容为000000FF000
00000FFFFFFFF,每个int数字都是32个bit的11.2.3写二进制文件第62页,共83页。BufferedOutputStream类写二进制文件的缓冲流类类似于文本文件中的Buffe
redWriter对于大量数据的写入,可提高效率用法示例:DataOutputStreamout=newDataOutputStream(newBufferedOutputStream(newFileOutputStream(fileNam
e)));6311.2.3写二进制文件第63页,共83页。publicstaticvoidmain(String[]args)throwsIOException{StringfileName="D:/m
ixedTypes.dat";DataOutputStreamdataOut=newDataOutputStream(newBufferedOutputStream(newFileOutputStream(fileName)));dataOut.writeInt(0)
;System.out.println(dataOut.size()+"byteshavebeenwritten.");dataOut.writeDouble(31.2);System.out.println(dataOut.size()+"byteshavebeenwritten.
");dataOut.writeBytes("JAVA");System.out.println(dataOut.size()+"byteshavebeenwritten.");dataOut.flush(
);dataOut.close();}第64页,共83页。运行结果4byteshavebeenwritten12byteshavebeenwritten16byteshavebeenwritten说明这个程序可作为字节计数器11
.2.3写二进制文件第65页,共83页。11.2.4读二进制文件本节知识点FileInputStreamDataInputStreamBufferedInputSteam读写整数读写单字节第6
6页,共83页。1)抽象类InputStreamInputstream类中的常用方法publicabstractintread():读取一个byte的数据,返回值是高位补0的int类型值。publicintread(byteb[]):读
取b.length个字节的数据放到b数组中。返回值是读取的字节数。publicintread(byteb[],intoff,intlen):读取len个字节的数据,存放到偏移量为off的b数组中publiclo
ngskip(longn):忽略输入流中的n个字节,跳过一些字节来读取第67页,共83页。派生类FileIntputStream作用:以文件作为数据输入源的数据流。或者说是打开文件,从文件读数据到内存的类FileInputStream(Strin
gname)通过文件系统中的路径名name创建一个FileInputStream对象。FileInputStream(Filefile)通过File对象创建一个FileInputStream对象。允许在把文件连接到输入流之前对文件做进一步分析,如修改写入删除等等1)抽象类
InputStream第68页,共83页。派生类FileIntputStream使用方法:Filefin=newFile("d:/abc.txt");FileInputStreamin=newFileInputStream(fin);FileInputStreamin
=newFileInputStream("d:/abc.txt");1)抽象类InputStream第69页,共83页。1)抽象类InputStreamDataInputStreamintread(byte[]b)i
ntread(byte[]b,intoff,intlen)booleanreadBoolean()bytereadByte()charreadChar()doublereadDouble()floatreadFloat()intreadInt()longreadLong
()shortreadShort()第70页,共83页。publicstaticvoidmain(String[]args){StringfName="D:\\data1.dat";intsum=0;try{DataI
nputStreaminstr=newDataInputStream(newBufferedInputStream(newFileInputStream(fileName)));sum+=instr.readInt();sum+=instr.readInt()
;sum+=instr.readInt();System.out.println("Thesumis:"+sum);instr.close();}catch(IOExceptioniox){System.out.println("Problemreading"+fileName);
}}第71页,共83页。readInt方法可以从输入流中读入4个字节并将其当作int型数据由于知道文件中存储的是3个int型数据,所以使用了3个读入语句如果不知道数据的个数该怎么办呢?因为DataInputStr
eam的读入操作如遇到文件结尾就会抛出EOFException异常,所以我们可以将读操作放入try块中11.2.4读二进制文件第72页,共83页。publicstaticvoidmain(String[]args)thro
wsIOException{FileInputStreams=newFileInputStream("d:/Hello.txt");intc;while((c=s.read())!=-1)//读取1字节,结束返回-1System.out.write(c);s.close();}
第73页,共83页。publicstaticvoidmain(String[]args)throwsException{DataOutputStreamout=newDataOutputStream(newFileOutputStream("D:/trytry.dat"));out.write
Byte(-1);out.close();DataInputStreamin=newDataInputStream(newFileInputStream("D:/trytry.dat"));inta=in.readByte
();System.out.println(Integer.toHexString(a));System.out.println(a);in.skip(-1);//往后一个位置,以便下面重新读出a=in.r
eadUnsignedByte();System.out.println(Integer.toHexString(a));System.out.println(a);in.close();}运行结果ffffffff-1ff25
5第74页,共83页。用二进制查看器打开D:/trytry.dat文件,其内容为FF如果用readByte读入,其高24位都将补1,所以结果还是-1如果用readUnsignedByte读入,其
高24位都将补0,结果就变成了255写的字节是连续的,中间没有分隔符,所以应该记住写的数据类型、个数等情况,以便将来利用11.2.4读二进制文件第75页,共83页。11.2.5处理压缩文件压缩流类java.util.zip
包中提供了一些类,使我们可以以压缩格式对流进行读写它们都继承自字节流类OutputStream和InputStream其中GZIPOutputStream和ZipOutputStream可分别把数据压缩成GZIP格式和Zip格式GZIPInputStream和ZipInputStre
am可以分别把压缩成GZIP格式或Zip的数据解压缩恢复原状第76页,共83页。11.2.5处理压缩文件如果要从ZIP压缩管理文件内读取某个文件,要先找到对应该文件的”目录进入点”(从它可知该文件在Zip文件内的位置),才能读取这个文件的内容。如果要将文件内容写到Zi
p文件内,必须先写入对应于该文件的”目录进入点”,并且把要写入文件内容的位置移到此进入点所指的位置,然后再写入文件内容。ZipEntry类产生的对象,用来代表一个ZIP压缩文件内的进入点(entry)。77第77页,共83页。11.2.5处理压缩文件压缩流的
实现ZIP是一种较为常见的压缩形式,在Java中要想实现ZIP的压缩需要导入java.util.zip包,可以使用此包中的ZipOutputStream、ZipInputStream、ZipEntry几个类完成。第78页,共83页
。11.2.5处理压缩文件ZipEntry:在每一个压缩文件中都会存在多个子文件,每一个子文件在JAVA中就使用ZipEntry表示。ZipEntry类的构造方法:publicZipEntry(Stringname)在实例化ZipEntry的时候,要设
置名称,此名称实际上就是压缩文件中的每一个元素中的名称。第79页,共83页。publicstaticvoidmain(String[]args)throwsIOException{FileInputStreamfi=newFileI
nputStream("D:/Hello.txt");FileOutputStreamfo=newFileOutputStream("D:/Hello.zip");ZipOutputStreamzo=new
ZipOutputStream(fo);System.out.println("compressingfromd:/Hello.txttod:/Hello.zip");ZipEntrye=newZipEntry("Hell.txt");zo.putNextE
ntry(e);intc;while((c=fi.read())!=-1)zo.write(c);fi.close();zo.close();}第80页,共83页。publicstaticvoidmain(Str
ing[]args)throwsIOException{FileInputStreamzfi=newFileInputStream("D:/Hello.zip");ZipInputStreamzi=newZipInputStream(zfi);ZipFilezf=newZipFile("D:/
Hello.zip");ZipEntryze=zi.getNextEntry();ints;InputStreamis=zf.getInputStream(ze);while((s=is.read())!=-1){System.out.print((ch
ar)s);}is.close();}第81页,共83页。运行结果首先生成了压缩文件“Hello.zip”,再读取显示其中的内容,和“Hello.txt”中的内容完全一样,解压缩文件“new.txt”,和
“Hello.txt”中的内容也完全相同说明read()方法读取一个字节,转化为[0,255]的之间的一个整数,返回一个int。如果读到了文件末尾,则返回-1。write(int)方法写一个字节的低8位,忽略了高24位。11.2.5处理压缩文件第82页,共
83页。作业1.求出20个最小的素数放在外存文件prime.txt中.2.编写程序统计给定文件中每个字母出现的频率。附加题:编写程序,从给定文件中读取一个整数序列,将其从小到大排序后再写入另外一个文件中。第83页,共83页。