




已阅读5页,还剩47页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020/5/3,1,网络程序设计NetworkProgramming第七章文件与数据流,赵建立山东科技大学信息科学与工程学院CollegeofInformationScienceandEngineering,ShandongUniversityofScienceandTechnologyzhaojianli,2020/5/3,2,什么是文件?,文件可以用来长期保存大量的数据在程序结束后仍能长期(永久)存在文件一般位于副存储设备上硬盘光盘磁带保存在内存中变量或数组中的数据是临时性数据当程序结束时一般就会丢失,2020/5/3,3,什么是数据流?,数据流是一系列的数据例如:System.in、System.out或System.err所处理的对象是数据流System.in-标准输入(从键盘)System.out标准输出(到屏幕)System.err标准错误输出(到屏幕)可以重新定向(例如:将从键盘改为从数据文件),2020/5/3,4,本章总体纲要,输入流与输出流随机访问文件读写器文件类File,2020/5/3,5,输入流与输出流,输入流:将数据从文件、标准输入或其他外部输入设备中加载到内存;输出流:将内存中的数据保存到文件或传输给设备,2020/5/3,6,文件与数据流简介,包java.io含有进行I/O处理的各种类两个主要数据类输入:java.io.InputStream输出:java.io.OutputStream两个主要的读写器类:读入:java.io.Reader写出:java.io.Writer.,2020/5/3,7,处理数据流的核心思想,处理数据流的核心思想能过循环处理每个数据单元,直到遇到结束符或出现异常(Exception)结束符在Unix操作系统下,键入Control-D表示数据流的结束在Windows操作系统下,键入Control-Z表示数据流的结束,2020/5/3,8,类InputStream,类java.io.InputStream是一个抽象(abstract)类,声明了从原始字节数据流读入数据的基本方法类中声明的方法:publicabstractintread()throwsIOExceptionpublicintread(bytedata)throwsIOExceptionpublicintread(bytedata,intoffset,intlength)throwsIOExceptionpubliclongskip(longn)throwsIOExceptionpublicintavailable()throwsIOExceptionpublicvoidclose()throwsIOExceptionpublicvoidmark(intreadlimit)publicvoidreset()throwsIOExceptionpublicbooleanmarkSupported(),2020/5/3,9,以字节为单位读入数据,类InputStream的成员方法read()读入单个无符号字节(unsignedbyte)的数据,并返回一个整数类型(int)的值(与读入的无符号字节数据相对应)正常返回:介于0和255之间的一个数如果遇到数据流结束,则返回-1publicabstractintread()throwsIOException,2020/5/3,10,方法read(),下面的两个方法可以一次读入多个字节到数组中java.io.InputStreampublicintread(bytedata)throwsIOExceptionpublicintread(bytedata,intoffset,intlength)throwsIOException,2020/5/3,11,关闭数据流,当处理完数据流时,应当关闭该数据流,以便释放该数据流所关联的资源publicvoidclose()throwsIOException,2020/5/3,12,示例,【例7-1】屏幕输入回显例程,2020/5/3,13,输出流,与InputStream相似,OutputStream也是abstract类类中的成员方法:publicabstractvoidwrite(intb)throwsIOExceptionpublicvoidwrite(bytedata)throwsIOExceptionpublicvoidwrite(bytedata,intoffset,intlength)throwsIOExceptionpublicvoidflush()throwsIOExceptionpublicvoidclose()throwsIOException有时输出流会先输出到缓存中,最后再一起将数据写到指定的位置(如文件)。方法flush()可以强制进行输出,即强制将数据写到指定的位置(如文件/标准输出),2020/5/3,14,示例,【例7-2】输出流的应用例程,2020/5/3,15,Print数据流,类java.io.PrintStream是非常重要的输出流类System.out就是其类型的变量特性:1、包含直接输出多种数据类型的不同成员方法;2、大部分成员方法不抛出异常;3、可以选择是否采用自动强制输出特性;,2020/5/3,16,Print数据流,publicPrintStreamprintf(Stringformat,Objectargs)采用格式字符串指定数据,并将数据写入到当前文件中,格式字符串定义的基本形式:%参数索引$字符集类型宽带.精度变换类型,2020/5/3,17,示例,【例7-3】PrintStream的应用例程,2020/5/3,18,文件与数据流,包java.io中含有对文件进行处理的类FileInputStream以字节为单位从文件中输入数据FileOutputStream以字节为单位输出数据到文件中FileReader以字符为单位读取文件数据FileWriter以字符为单位写数据到文件中随机访问文件RandomAccessFile,2020/5/3,19,从文件中输入,类java.io.FileInputStream表示从文件中输入字节数据的输入流(InputStream)类中的成员方法:publicFileInputStream(Stringname)throwsFileNotFoundExceptionpublicFileInputStream(Filefile)throwsFileNotFoundExceptionpublicFileInputStream(FileDescriptorfdObj)publicnativeintread()throwsIOExceptionpublicintread(bytedata)throwsIOExceptionpublicintread(bytedata,intoffset,intlength)throwsIOExceptionpublicnativelongskip(longn)throwsIOExceptionpublicnativeintavailable()throwsIOExceptionpublicnativevoidclose()throwsIOExceptionpublicfinalFileDescriptorgetFD()throwsIOException,2020/5/3,20,从文件中输入,文件读操作步骤:1、创建类java.io.FileInputStream的实例对象,以获取相关的文件资源;2、通过类java.io.FileInputStream的read成员方法将数据从文件读入内存;3、最后调用类java.io.FileInputStream的close成员方法,关闭文件,以释放所占用的系统资源;,2020/5/3,21,示例,【例7-4】FileInputStream的应用例程,2020/5/3,22,写数据到文件中,类java.io.FileOutputStream表示将字节数据写入到文件中的输出流(OutputStream)类中的成员方法:publicFileOutputStream(Stringname)throwsIOExceptionpublicFileOutputStream(Stringname,booleanappend)throwsIOExceptionpublicFileOutputStream(Filefile)throwsIOExceptionpublicFileOutputStream(FileDescriptorfdObj)publicnativevoidwrite(intb)throwsIOExceptionpublicvoidwrite(bytedata)throwsIOExceptionpublicvoidwrite(bytedata,intoffset,intlength)throwsIOExceptionpublicnativevoidclose()throwsIOExceptionpublicfinalFileDescriptorgetFD()throwsIOException,2020/5/3,23,文件读操作步骤:1、创建类java.io.FileOutputStream的实例对象,以获取相关的文件资源;2、通过类java.io.FileOutputStream的write成员方法将数据写入文件,在这中间,还可以通过类java.io.FileOutputStream的flush成员方法强制输出;3、最后调用类java.io.FileInputStream的close成员方法,关闭文件,以释放所占用的系统资源;,写数据到文件中,2020/5/3,24,示例,【例7-5】FileOutputStream的应用例程J_WriterFile.java,2020/5/3,25,带缓存的数据流,输入/输出(I/O)的缓存机制:提高输入/输出(I/O)性能的一种方法输入/输出(I/O)往往很慢,常常是计算机处理事务的瓶颈一次输入/输出大量数据比分成很多次输入/输出要快很多将输出数据暂时放在内存中的某个位置(称为缓存)整个缓存写到指定位置(如硬盘)类java.io.BufferedInputStream和类java.io.BufferedOutputStream是带缓存的输入/输出流,2020/5/3,26,带缓存的数据流,构造方法:publicBufferedInputStream(InputStreamin)publicBufferedInputStream(InputStreamin,intsize)publicBufferedOutputStream(OutputStreamout)publicBufferedOutputStream(OutputStreamout,intsize)最佳缓存大小高度依赖于机器平台以及输入/输出的数据大小,2020/5/3,27,示例,【例7-6】J_BufferedInputStream.java比较带与不带缓存在读取数据时的效率比较,2020/5/3,28,本章总体纲要,输入流与输出流随机访问文件读写器文件类File,2020/5/3,29,随机访问文件,前面介绍的输入流和输出流在对文件进行操作时一般都是顺序的读取或存取数据,而且读取数据和存取数据必须使用不同的类。随机访问文件方式可以在指定位置读/写字节内容publicRandomAccessFile(Stringname,Stringmode)throwsFileNotFoundExceptionName文件名Mode文件的访问方式,2020/5/3,30,运用RandomAccessFile,当RandomAccessFile的实例对象与某个文件相关联在指定位置读取或写出数据,位置指定方法如下:voidseek(longpos)基本数据类型数据具有固定字节数(如:double8字节等等)这是Java基本数据类型数据的基本特点,2020/5/3,31,示例:随机访问文件/J_RandomAccessFile.java,【例7-7】/随机访问文件例程。importjava.io.IOException;importjava.io.RandomAccessFile;publicclassJ_RandomAccessFilepublicstaticvoidmain(Stringargs)tryRandomAccessFilef=newRandomAccessFile(test.txt,rw);doubled;for(inti=0;i10;i+)f.writeDouble(0.5*i);f.seek(16);f.writeDouble(0);f.seek(0);for(inti=0;i10;i+)d=f.readDouble();System.out.println(+i+:+d);/for循环结束f.close();,catch(IOExceptione)System.err.println(发生异常:+e);e.printStackTrace();/try-catch结构结束/方法main结束/类J_RandomAccessFile结束,2020/5/3,32,本章总体纲要,输入流与输出流随机访问文件读写器文件类File,2020/5/3,33,Reader和Writer(读写器),前面讲的输入/输出流针对的是字节流处理文本数据可以采用类java.io.Reader和java.io.Writer类java.io.Reader和java.io.Writer是抽象(abstract)类是基于文本的其它读写器的父类(superclasses)输入/输出流字节流读写器是基于字符,2020/5/3,34,类Reader和Writer中的成员方法,类java.io.Reader中的成员方法类似于类java.io.InputStream中的成员方法类java.io.Writer中的成员方法类似于类java.io.OutputStream中的成员方法,2020/5/3,35,例如:类Writer中的成员方法write,publicvoidwrite(intc)throwsIOException写出双字节的单个字符(其值范围:从0到65535)。其它write方法:publicvoidwrite(chartext)throwsIOExceptionpublicabstractvoidwrite(chartext,intoffset,intlength)throwsIOExceptionpublicvoidwrite(Strings)throwsIOExceptionpublicvoidwrite(Strings,intoffset,intlength)throwsIOException,2020/5/3,36,带缓存的Reader可以提高读取数据性能,类java.io.BufferedReader是类java.io.Reader的子类java.lang.Object|+-java.io.Reader|+-java.io.BufferedReader当读取数据量很大时,一个很好的方法是:通过类BufferedReader,这时需要给Reader的子类(如:FileReader)“外包”上类BufferedReader示例:BufferedReaderbr=newBufferedReader(newFileReader(test);,2020/5/3,37,行号,类java.io.LineNumberReader是类java.io.BufferedReader的子类:带有行号信息java.lang.Object|+-java.io.Reader|+-java.io.BufferedReader|+-java.io.LineNumberReader类LineNumberReader中的部分方法publicLineNumberReader(Readerin)publicLineNumberReader(Readerin,intsize)publicvoidsetLineNumber(intlineNumber)publicintgetLineNumber(),2020/5/3,38,示例,【例7-8】J_BufferedReaderWriter.java,带缓存读写器例程,2020/5/3,39,类InputStreamReader,类java.io.InputStreamReader起到了从输入流到Reader的桥梁作用示例:InputStreamReaderisr=newinputStreamReader(System.in);,2020/5/3,40,类OutputStreamWriter,类java.io.OutputStreamWriter起到了从输出流到Writer的桥梁作用示例:OutputStreamWriterosw=newOutputStreamWriter(System.out);,2020/5/3,41,示例,【例7-9】J_ReadData,从控制台窗口读入数据的例程,2020/5/3,42,读取文件内容,Java.io.FileReader兼容java.io.Reader的所有成员方法类FileReaderjava.lang.Object|+-java.io.Reader|+-java.io.InputStreamReader|+-java.io.FileReader示例:FileReaderfr=newFileReader(test);,2020/5/3,43,写文本文件,类java.io.FileWriterjava.lang.Object|+-java.io.Writer|+-java.io.OutputStreamWriter|+-java.io.FileWriter示例:FileWriterfw=newFileWriter(“test);,2020/5/3,44,示例,【例7-10】J_FileReaderWriter,文件读写器例程,2020/5/3,45,PrintWriter,类java.io.PrintWriter是类java.io.Writer的子类java.lang.Objectjava.lang.Object|+-java.io.Writer+-java.io.OutputStream|+-java.io.PrintWriter+-java.io.FilterOutputStream|+-java.io.PrintStream类java.io.PrintStream与类java.io.PrintWriter的不同点类PrintWriter用于处理文本数据而不是字节数据采用PrintWriter时,只有println,printf,format方法才可能自动强制输出。PrintStream可以选择是否采用自动输出。,2020/5/3,46,本章总体纲要,输入流与输出流随机访问文件读写器文件类File,2020/5/3,47,类File,前面介绍的类基本上都可以对文件的内容进行处理。当文件不存在的时候需要通过异常才能得到这种信息。Java.io.File解决了此问题,从整体上对文件进行处理。类java.io.File提供文件与路径的各种有用信息并不打开文件,或处理文件内容publicFile(Stringpathname)pulbicFile(Stringparent,Stringchild)示例:Filef1=newFile(/etc/passwd);Filef2=newFile(/etc,passwd);,2020/5/3,48,类File中的方法exists(),通过方法exists()判断文件或路径是否存在创建了类File的实例对象,并不等价于在硬盘上创建该文件判断当前对象表示的文件或路径是否存在,存在返回true,否则返回false.,2020/5/3,49,类File中的方法,publicStri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版商铺租赁合同转让及租期延长补充协议
- 2025滨湖菊园园林园艺产品销售与养护服务全面合同
- 2025房地产项目智能家居系统升级精装修工程合同(项目编号:SG20250003)
- 2025冻猪白条冷链仓储配送与电商平台合作合同
- 2025橱柜家具销售合同范本专业定制家居解决方案
- 2025年集装箱租赁及运输代理合同范本
- 2025年文化旅游项目成本预算及控制建议合同范本
- 2025定向智能交通系统合作协议书范本:智慧城市建设
- 2025版唐代离婚协议书:针对唐代家庭财产继承的离婚协议
- 2025房地产总经理任命书及年度工作计划与考核协议
- 2025年党建知识应知应会测试题库(附答案)
- 2025至2030中国人造土壤市场经营形势与未来发展方向研究报告
- 特种设备突发事件应急处置技术指南 第5部分:起重机械-地方标准
- 友邦资讯面试题目及答案
- 2025年社区工作者考试真题库及答案
- 血症中医护理方法
- 飞灰处置再生资源化利用项目可行性研究报告模板-立项备案
- GB/T 15620-2025镍及镍合金实心焊丝和焊带
- 张姣飞时间管理课件
- 牧昆:亚朵星球怎样用内容打增量 洞察无法逃离日常用真人秀的思路打增量
- 养老机构出入管理办法
评论
0/150
提交评论