ImageVerifierCode 换一换
格式:PPT , 页数:119 ,大小:1.06MB ,
资源ID:10302103      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/10302103.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(第6章 输入输出流和文件.ppt)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

第6章 输入输出流和文件.ppt

1、Java,语言,程序设计,(第,2,版),单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Java,语言程序设计(第,2,版),郑莉,清华大学,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,6,章,输入/输出流和文件,郑莉,2,目录,6.1 输入/输出流,6.2 文件读写,6.3 本章小结,3,6.1 输入/输出流,通常程序需要从外部获取/输出信息,这个“外部”范围很广,包括诸如键盘、显示器、文件、磁盘、网络、另外一个程序等,“信息”也可以是任何类型的,例如一个对象、串字符、图像、声音等,通过使用,java

2、io,包中的输入/输出流类就可以达到输入输出信息的目的,4,6.1.1 I/O,流的概念,I/O,流(,Input/Output),在,Java,中将信息的输入与输出过程抽象为,I/O,流,输入是指数据流入程序,输出是指数据从程序流出,一个流就是一个从源流向目的地的数据序列,IO,流类一旦被创建就会自动打开,通过调用,close,方法,可以显式关闭任何一个流,如果流对象不再被引用,,Java,的垃圾回收机制也会隐式地关闭它,6.1,输入/输出流,5,输入流,为了从信息源获取信息,程序打开一个输入流,程序可从输入流读取信息,输出流,当程序需要向目标位置写信息时,便需要打开一个输出流,程序通过输

3、出流向这个目标位置写信息,6.1.1 I/O,流的概念(续),6.1,输入/输出流,6,对象,源?目标?或两者?,disk file,running program,monitor,keyboard,Internet connection,image scanner,mouse,Both,Both,Destination,Source,Both,Source,Source,6.1.1,I/O,流的概念(续),源和目标的类型,6.1,输入/输出流,7,不论数据从哪来,到哪去,也不论数据本身是何类型,读写数据的方法大体上都是一样的:,6.1.1,I/O,流的概念(续),读写数据的方法,读,写,打开

4、一个流,读信息,关闭流,打开一个流,写信息,关闭流,6.1,输入/输出流,8,6.1.2 预定义的,I/O,流类概述,输入/输出流可以从以下几个方面进行分类,从流的方向划分,输入流,输出流,从流的分工划分,节点流,处理流,从流的内容划分,面向字符的流,面向字节的流,6.1,输入/输出流,9,面向字符的流:专门用于字符数据,面向字节的流:用于一般目的,6.1.2 预定义的,I/O,流类概述(续),java.io,包的顶级层次结构,6.1,输入/输出流,10,6.1.2 预定义的,I/O,流类概述(续),面向字符的流,面向字符的流,针对字符数据的特点进行过优化,提供一些面向字符的有用特性,源或目标

5、通常是文本文件,6.1,输入/输出流,11,实现内部格式和文本文件中的外部格式之间转换,内部格式:,16-bit char,数据类型,外部格式:,UTF(Universal character set Transformation Format):,很多人称之为,Universal Text Format,包括,ASCII,码及非,ASCII,码字符,比如:斯拉夫,(Cyrillic),字符,希腊字符,亚洲字符等,6.1.2 预定义的,I/O,流类概述(续),面向字符的流,6.1,输入/输出流,12,面向字符的抽象类,Reader,和,Writer,java.io,包中所有字符流的抽象基类,R

6、eader,提供了输入字符的,API,Writer,提供了输出字符的,API,它们的子类又可分为两大类,节点流:从数据源读入数据或往目的地写出数据,处理流:对数据执行某种处理,多数程序使用这两个抽象类的一系列子类来读入/写出文本信息,例如,FileReader,/,FileWriter,用来读/写文本文件,6.1.2 预定义的,I/O,流类概述(续),面向字符的流,6.1,输入/输出流,13,6.1.2 预定义的,I/O,流类概述(续),面向字符的流,阴影部分为节点流,6.1,输入/输出流,14,数据源或目标中含有非字符数据,必须用字节流来输入/输出,通常被用来读写诸如图片、声音之类的二进制数

7、据,绝大多数数据是被存储为二进制文件的,世界上的文本文件大约只能占到2,通常二进制文件要比含有相同数据量的文本文件小得多,6.1.2 预定义的,I/O,流类概述(续),面向字节的流,6.1,输入/输出流,15,InputStream,和,OutputStream,是用来处理8位字节流的抽象基类,程序使用这两个类的子类来读写8位的字节信息,分为两部分,节点流,处理流,6.1.2 预定义的,I/O,流类概述(续),面向字节的流,6.1,输入/输出流,16,6.1.2 预定义的,I/O,流类概述(续),面向字节的流,阴影部分为节点流,6.1,输入/输出流,17,标准输入输出流对象,System,类的

8、静态成员变量,包括,System.in,:InputStream,类型的,代表标准输入流,这个流是已经打开了的,默认状态对应于键盘输入。,System.out,:PrintStream,类型的,代表标准输出流,默认状态对应于屏幕输出,System.err,:PrintStream,类型的,代表标准错误信息输出流,默认状态对应于屏幕输出,6.1.2 预定义的,I/O,流类概述(续),标准输入输出,6.1,输入/输出流,18,6.1.2 预定义的,I/O,流类概述(续),标准输入输出,标准,I/O,重新导向,setIn(InputStream),:,设置标准输入流,setOut(PrintStre

9、am),:,设置标准输出流,setErr(PrintStream),:,设置标准错误输出流,6.1,输入/输出流,19,从键盘读入信息并在显示器上显示,import java.io.*;,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.o

10、ut.println(s);,6.1.2 预定义的,I/O,流类概述(续),例,6-1,运行结果,Hello!,Hello!,6.1,输入/输出流,20,System.in,程序启动时由,Java,系统自动创建的流对象,它是原始的字节流,不能直接从中读取字符,需要对其进行进一步的处理,InputStreamReader(System.in),以,System.in,为参数创建一个,InputStreamReader,流对象,相当于字节流和字符流之间的一座桥梁,读取字节并将其转换为字符,BufferedReader in,对,InputStreamReader,处理后的信息进行缓冲,以提高效率,

11、6.1.2 预定义的,I/O,流类概述(续),例,6-1,说明,6.1,输入/输出流,21,Java SE 5.0,新特性,Java 5.0,终于也有了自己的,printf!,out.printf(“%-12s is%2d long”,name,l);,out.printf(“value=%2.2F”,value);,%n,是平台无关的换行标志,一个方便的扫描,API:,把文本转化成基本类型或者,String,Scanner s=new Scanner(System.in);,int n=s.nextInt();,还有下列方法:,nextByte(),nextDouble(),nextFloa

12、t,nextInt(),nextLine(),nextLong(),nextShort(),6.1,输入/输出流,22,重导向标准输入,System.in,和标准输出,System.out,import java.io.*;,public class Redirecting,public static void main(String args)throws IOException,BufferedInputStream in=new BufferedInputStream(,new FileInputStream,(Redirecting.java,);,PrintStream out=ne

13、w PrintStream(new,BufferedOutputStream(new FileOutputStream(,test.out,);,System.setIn(in);,System.setOut(out);,System.setErr(out);,BufferedReader br=new BufferedReader(,new InputStreamReader(,System.in,);,String s;,while(s=br.readLine()!=null),System.out,.println(s);,out.close();/Remember this!,6.1.

14、2 预定义的,I/O,流类概述(续),Redirecting.java,6.1,输入/输出流,23,处理流,不直接与数据源或目标相连,而是基于另一个流来构造,从流读写数据的同时对数据进行处理,例6-1中的,InputStreamReader,和,BufferedReader,都属于处理流,InputStreamReader,读取字节并转换为字符,BufferedReader,对另一个流产生的数据进行缓冲,6.1.2 预定义的,I/O,流类概述(续),处理流,6.1,输入/输出流,24,用一行表达式实现:,BufferedReader,stdin=new,BufferedReader,(new,

15、InputStreamReader,(,System.in,);,6.1.2 预定义的,I/O,流类概述(续),处理流,6.1,输入/输出流,25,IO,异常,多数,IO,方法在遇到错误时会抛出异常,因此调用这些方法时必须,在方法头声明抛出,IOException,异常,或者在,try,块中执行,IO,,然后捕获,IOException,6.1.2 预定义的,I/O,流类概述(续),I/O,异常,6.1,输入/输出流,26,6.2 文件读写,写文本文件,读文本文件,写二进制文件,读二进制文件,File,类,处理压缩文件,对象序列化,随机文件读写,27,6.2.1 写文本文件,本节知识点,Fil

16、eWriter,类,创建一个磁盘文件,关闭一个磁盘文件,write(),方法,捕获,I/O,异常,BufferedWriter,类,6.2,文件读写,28,在,C,盘根目录创建文本文件,Hello.txt,,并往里写入若干行文本,import java.io.*;,class FileWriterTester,public static void main(String args),throws IOException,/main,方法中声明抛出,IO,异常,String fileName=C:Hello.txt;,FileWriter,writer=new,FileWriter(fileNa

17、me),;,writer.write(Hello!n);,writer.write(This is my first text file,n );,writer.write(You can see how this is done.n);,writer.write(,输入一行中文也可以,n);,writer.close(),;,6.2.1 写文本文件(续),例,6-2,6.2,文件读写,29,打开,C,盘根目录下的,Hello.txt,文件,换行有些问题,例,6-4,中将解决这个问题,6.2.1 写文本文件(续),例,6-2,运行结果,6.2,文件读写,30,每次运行这个程序,都将删除已经存在

18、的”,Hello.txt”,文件,创建一个新的同名文件,FileWriter,的构造方法有五个,本例是通过一个字符串指定文件名来创建,FileWriter,类的,write,方法向文件中写入字符,6.2,文件读写,6.2.1 写文本文件(续),例,6-2,说明,31,Writer,类的流可实现内部格式到外部磁盘文件格式的转换,“,Hello.txt”,是一个普通的,ASCII,码文本文件,每个英文字符占一个字节,中文字符占两个字节,Java,程序中的字符串则是每个字符占两个字节的,采用,Unicode,编码,close,方法清空流里的内容并关闭它。如果不调用该方法,可能系统还没有完成所有数据的

19、写操作,程序就结束了,6.2.1 写文本文件(续),例,6-2,说明(续),6.2,文件读写,32,处理,IO,异常,import java.io.*;,class FileWriterTester,public static void main(String args),String fileName=c:Hello.txt;,try,/,将所有,IO,操作放入,try,块中,FileWriter writer=new,FileWriter(fileName,true),;,writer.write(Hello!n);,writer.write(This is my first text f

20、ile,n );,writer.write(You can see how this is done.n);,writer.write(,输入一行中文也可以,n);,writer.close();,catch(IOException iox),System.out.println(Problem writing+fileName);,6.2.1 写文本文件(续),例,6-3,6.2,文件读写,33,运行此程序,会发现在原文件内容后面又追加了重复的内容,这就是将构造方法的第二个参数设为,true,的效果,如果将文件属性改为只读属性,再运行本程序,就会出现,IO,错误,程序将转入,catch,块中

21、给出出错信息,6.2.1 写文本文件(续),例,6-3,说明,6.2,文件读写,34,BufferedWriter,类,如果需要写入的内容很多,就应该使用更为高效的缓冲器流类,BufferedWriter,FileWriter,和,BufferedWriter,类都用于输出字符流,包含的方法几乎完全一样,但,BufferedWriter,多提供了一个,newLine(),方法用于换行,不同厂家生产的计算机(,IBM,Apple,VAX,Sun),对文字的换行方法不同,。newLine(),方法可以输出在当前计算机上正确的换行符,6.2.1 写文本文件(续),BufferedWriter,类,

22、6.2,文件读写,35,使用,BufferedWriter,完成例6-2实现的功能,import java.io.*;,class BufferedWriterTester,public static void main(String args)throws IOException,String fileName=C:/newHello.txt;,BufferedWriter,out=,new BufferedWriter(,new FileWriter(fileName);,out.write(Hello!);,out.newLine();,out.write(This is another

23、 text file using BufferedWriter,);,out.newLine();,out.write(So I can use a common way to start a newline);,out.close();,6.2.1 写文本文件(续),例,6-4,6.2,文件读写,36,用任何文本编辑器打开,newHello.txt,都会出现正确的换行效果,6.2.1 写文本文件(续),例,6-4,运行结果,6.2,文件读写,37,6.2.2 读文本文件,本节知识点,Reader,FileReader,BufferedReader,和,readLine(),文本文件复制,6.

24、2,文件读写,38,FileReader,类,从文本文件中读取字符,继承自,Reader,抽象类的子类,InputStreamReader,BufferedReader,读文本文件的缓冲器类,具有,readLine(),方法,可以对换行符进行鉴别,一行一行地读取输入流中的内容,继承自,Reader,6.2.2 读文本文件(续),6.2,文件读写,39,6.2.2 读文本文件(续),文件输入方法:,BufferedReader in=new,BufferedReader,(new,FileReader,(,fileName,);,6.2,文件读写,40,从,Hello.txt,中读取文本并显示在

25、屏幕上,import java.io.*;,class BufferedReaderTester,public static void main(String args),String fileName=C:/Hello.txt,line;,try,BufferedReader in=new BufferedReader(,new FileReader(fileName );,line=in.readLine();,/,读取一行内容,while(line!=null),System.out.println(line);,line=in.readLine();,in.close();,catch

26、IOException iox),System.out.println(,Problem reading +fileName,);,6.2.2 读文本文件(续),例,6-5,6.2,文件读写,41,运行该程序,屏幕上将逐行显示出,Hello.txt,文件中的内容,FileReader,对象:创建后将打开文件,如果文件不存在,会抛出一个,IOException,BufferedReader,类的,readLine(),方法:从一个面向字符的输入流中读取一行文本。如果其中不再有数据,返回,null,Reader,类的,read(),方法:也可用来判别文件结束。该方法返回的一个表示某个字符的,in

27、t,型整数,如果读到文件末尾,返回-1。据此,可修改本例中的读文件部分:,int c;,while(c=in.read()!=-1)System.out.print(,(char)c,);,close(),方法:为了操作系统可以更为有效地利用有限的资源,应该在读取完毕后,调用该方法,6.2.2 读文本文件(续),例,6-5,说明,6.2,文件读写,42,指定源文件和目标文件名,将源文件的内容拷贝至目标文件。调用方式为:,java copy sourceFile destinationFile,6.2.2 读文本文件(续),例,6-6,6.2,文件读写,43,共包括两个类,CopyMaker,p

28、rivate boolean,openFiles(),private boolean,copyFiles(),private boolean,closeFiles(),public boolean,copy(String src,String dst),FileCopy,main(),6.2.2 读文本文件(续),例,6-6,6.2,文件读写,44,import java.io.*;,class CopyMaker,String sourceName,destName;,BufferedReader source;,BufferedWriter dest;,String line;,6.2,文

29、件读写,6.2.2 读文本文件(续),例,6-6,45,private boolean openFiles(),try,source=new BufferedReader(,new FileReader(,sourceName,),);,catch(IOException iox),System.out.println(Problem opening +sourceName);,return false;,try,dest=new BufferedWriter(new FileWriter(,destName,);,catch(IOException iox),System.out.print

30、ln(Problem opening +destName);,return false;,return true;,6.2.2 读文本文件(续),例,6-6,6.2,文件读写,46,private boolean copyFiles(),try,line=source.readLine();,while(,line!=null,),dest.write(line);,dest.newLine();,line=source.readLine(),;,catch(IOException iox),System.out.println(Problem reading or writing);,ret

31、urn false;,return true;,6.2.2 读文本文件(续),例,6-6,6.2,文件读写,47,private boolean closeFiles(),boolean retVal=true;,try,source.close();,catch(IOException iox),System.out.println(Problem closing +sourceName);,retVal=false;,try,dest.close();,catch(IOException iox),System.out.println(Problem closing +destName);

32、retVal=false;,return retVal;,6.2.2 读文本文件(续),例,6-6,6.2,文件读写,48,public boolean copy(String src,String dst),sourceName=src;,destName =dst;,return,openFiles(),&,copyFiles(),&,closeFiles(),;,public class FileCopy,/,一个文件中只能有一个公有类,public static void main(String args),if(args.length=2),new CopyMaker().copy

33、args0,args1),;,else System.out.println(Please Enter File names);,6.2.2 读文本文件(续),例,6-6,6.2,文件读写,49,此文件,FileCopy.java,编译后生成,FileCopy.class,和,CopyMaker.class,两个字节码文件,运行结果,在命令行方式下执行如下命令,java FileCopy c:/Hello.txt c:/CopyHello.txt,则在,C,盘根目录下会出现,CopyHello.txt,文件,内容与,Hello.txt,完全相同,6.2.2 读文本文件(续),例,6-6,运行

34、结果,6.2,文件读写,50,6.2.3 写二进制文件,本节知识点,二进制文件,OutputStream,FileOutputStream,BufferedOutputStream,DataOutputStream,writeInt(),writeDouble(),writeBytes(),6.2,文件读写,51,二进制文件,原则上讲,所有文件都是由8位的字节组成的,如果文件字节中的内容应被解释为字符,则文件被称为文本文件;如果被解释为其它含义,则文件被称为二进制文件,例如文字处理程序,例如字处理软件,Word,产生的,doc,文件中,数据要被解释为字体、格式、图形和其他非字符信息。因此,这样

35、的文件是二进制文件,不能用,Reader,流正确读取,6.2.3 写二进制文件(续),二进制文件,6.2,文件读写,52,为什么需要二进制文件,输入输出更快,比文本文件小很多,有些数据不容易被表示为字符,6.2.3 写二进制文件(续),二进制文件,6.2,文件读写,53,抽象类,OutputStream,派生类,FileOutputStream,用于一般目的输出(非字符输出),用于成组字节输出,派生类,DataOutputStream,具有写各种基本数据类型的方法,将数据写到另一个输出流,它在所有的计算机平台上使用同样的数据格式,其常用的一些方法见表,6-2,其中,size,方法,可作为计数器

36、统计写入的字节数,6.2.3 写二进制文件(续),OutputStream,类,6.2,文件读写,54,6.2.3 写二进制文件(续),表6,-2,6.2,文件读写,55,6.2.3 写二进制文件(续),表6,-2,6.2,文件读写,56,6.2.3 写二进制文件(续),例,6-7,将三个,int,型数字255/0/1写入数据文件,data1.dat,import java.io.*;,class FileOutputstreamTester,public static void main(String args),String fileName=c:/data1.dat;,int valu

37、e0 =255,value1 =0,value2=-1;,try,DataOutputStream out=new DataOutputStream(,new FileOutputStream(fileName );,out.,writeInt,(value0);,out.,writeInt,(value1);,out.,writeInt,(value2);,out.close();,catch(IOException iox),System.out.println(Problem writing +fileName);,6.2,文件读写,57,运行结果,运行程序后,在,C,盘生成数据文件,d

38、ata1.dat,用写字板打开没有任何显示,用,ultraEdit,打开查看其二进制信息,,,内容为00 00 00,FF 00 00 00 00 FF FF FF FF,,每个,int,数字都是32个,bit,的,说明,FileOutputStream,类的构造方法负责打开文件“,data1.dat”,用于写数据,FileOutputStream,类的对象与,DataOutputStream,对象连接,写基本类型的数据,6.2.3 写二进制文件(续),例,6-7,运行结果,6.2,文件读写,58,BufferedOutputStream,写二进制文件的缓冲流类,类似于文本文件中的,Buffe

39、redWriter,对于大量数据的写入,可提高效率,用法示例:,DataOutputStream,out=new,DataOutputStream,(,new,BufferedOutputStream,(,new,FileOutputStream,(fileName);,6.2.3 写二进制文件(续),BufferedOutputStream,类,6.2,文件读写,59,向文件中写入各种数据类型的数,并统计写入的字节数,import java.io.*;,class BufferedOutputStreamTester,public static void main(String args)t

40、hrows IOException,String fileName=mixedTypes.dat;,DataOutputStream,dataOut,=new DataOutputStream(,new BufferedOutputStream(,new FileOutputStream(fileName );,dataOut.,writeInt(0),;,System.out.println(,dataOut.size()+bytes have been written.,);,dataOut.,writeDouble(31.2),;,System.out.println(,dataOut.

41、size()+bytes have been written.,);,dataOut.,writeBytes(JAVA),;,System.out.println(,dataOut.size()+bytes have been written.,);,dataOut.close();,6.2.3 写二进制文件(续),例,6-8,6.2,文件读写,60,运行结果,4,bytes have been written,12 bytes have been written,16 bytes have been written,说明,这个程序可作为字节计数器,6.2.3 写二进制文件(续),例,6-8,

42、运行结果,6.2,文件读写,61,向文件中写入内容为-1的一个字节,并读出。,import java.io.*;,public class FileOutputStreamTester,public static void main(String args)throws Exception,DataOutputStream,out,=new DataOutputStream(,new FileOutputStream(c:/trytry.dat);,out,.,writeByte(-1),;,out,.close();,DataInputStream in=new DataInputStrea

43、m(,new FileInputStream(c:/trytry.dat);,int a=in.,readByte(),;,System.out.println(Integer.toHexString(a);,System.out.println(a);,in.,skip(-1),;/,往后一个位置,以便下面重新读出,a=in.,readUnsignedByte(),;,System.out.println(Integer.toHexString(a);,System.out.println(a);in.close();,6.2.3 写二进制文件(续),例,6-9,6.2,文件读写,62,运行

44、结果,ffffffff,-1,ff,255,说明,用,ultraEdit,打开,c:/trytry.dat,文件,其内容为,FF,如果用,readByte,读入,其高24位都将补1,所以结果还是,-1,如果用,readUnsignedByte,读入,其高24位都将补0,结果就变成了,255,写的字节是连续的,中间没有分隔符,所以应该记住写的数据类型、个数等情况,以便将来利用,6.2.3 写二进制文件(续),例,6-9,运行结果,6.2,文件读写,63,6.2.4 读二进制文件,本节知识点,FileInputStream,DataInputStream,BufferedInputSteam,读写

45、整数,读写单字节,6.2,文件读写,64,过滤流,读或写的同时对数据进行处理,通过另外一个流来构造一个过滤流,大部分,java.io,包所提供过滤流都是,FilterInputStream,和,FilterOutputStream,的子类,DataInputStream,和,DataOutputStream,BufferedInputStream,和,BufferedOutputStream,LineNumberInputStream,PushbackInputStream,PrintStream,6.2.4 读二进制文件(续),过滤流,6.2,文件读写,65,读取例6-7创建的数据文件中的3

46、个,int,型数字,显示相加结果,import java.io.*;,class DataInputStreamTester,public static void main(String args),String fileName=c:data1.dat;,int sum=0;,try,DataInputStream instr=new DataInputStream(,new BufferedInputStream(new FileInputStream(fileName);,sum+=,instr.readInt(),;,sum+=,instr.readInt(),;,sum+=,inst

47、r.readInt(),;,System.out.println(The sum is:+sum);,instr.close();,catch(IOException iox),System.out.println(Problem reading +fileName);,6.2.4 读二进制文件(续),例,6-10,6.2,文件读写,66,该程序显示结果是,254,分析,readInt,方法可以从输入流中读入4个字节并将其当作,int,型数据,由于知道文件中存储的是3个,int,型数据,所以使用了3个读入语句,如果不知道数据的个数该怎么办呢?因为,DataInputStream,的读入操作如遇

48、到文件结尾就会抛出,EOFException,异常,所以我们可以将读操作放入,try,块中,6.2.4 读二进制文件(续),例,6-10,运行结果,6.2,文件读写,67,将读操作放入,try,块中,使遇到文件结尾就会抛出,EOFException,异常,进入到相应的,catch,块中,try,while(true)sum+=instr.readInt();,catch(EOFException eof),System.out.println(The sum is:+sum);,instr.close();,6.2.4 读二进制文件(续),例,6-10,修改,6.2,文件读写,68,如果没有读

49、到结尾,在读取过程中发生的异常属于,IOException,,,这样就需要我们再加一个,catch,块处理这种异常,一个,try,块后面可以跟不止一个,catch,块,用于处理各种可能发生的异常,我们可以在上段代码后再加上用于捕捉,IOException,的代码段如下,catch(,IOException,eof),System.out.println(Problem reading input);,instr.close();,6.2.4 读二进制文件(续),例,6-10,修改,6.2,文件读写,69,如果,catch,块中的,close,方法也发生异常,现在就没法捕获了。解决方法可以有,在

50、main,方法中抛出异常,比较简单,缺点是没有,catch,块,因而无法对异常进行进一步处理,例如给出提示信息,使用嵌套的,try,块,6.2.4 读二进制文件(续),例,6-10,修改,6.2,文件读写,70,import java.io.*;,class DataInputStreamTester,public static void main(String args),String fileName=c:/data1.dat;long sum=0;,try,DataInputStream instr=new DataInputStream(,new BufferedInputStrea

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服