您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 网络程序设计(java)第07章 文件与数据流new
2020/5/241网络程序设计NetworkProgramming第七章文件与数据流赵建立山东科技大学信息科学与工程学院CollegeofInformationScienceandEngineering,ShandongUniversityofScienceandTechnologyzhaojianli@gmail.com2020/5/242什么是文件?•文件–可以用来长期保存大量的数据–在程序结束后仍能长期(永久)存在–文件一般位于副存储设备上•硬盘•光盘•磁带•保存在内存中变量或数组中的数据是临时性数据–当程序结束时一般就会丢失2020/5/243什么是数据流?•数据流是一系列的数据–例如:System.in、System.out或System.err所处理的对象是数据流•System.in-标准输入(从键盘)•System.out–标准输出(到屏幕)•System.err–标准错误输出(到屏幕)•可以重新定向(例如:将从键盘改为从数据文件)2020/5/244本章总体纲要•输入流与输出流•随机访问文件•读写器•文件类File2020/5/245输入流与输出流•输入流:将数据从文件、标准输入或其他外部输入设备中加载到内存;•输出流:将内存中的数据保存到文件或传输给设备2020/5/246文件与数据流简介•包java.io含有进行I/O处理的各种类•两个主要数据类输入:java.io.InputStream输出:java.io.OutputStream•两个主要的读写器类:读入:java.io.Reader写出:java.io.Writer.2020/5/247处理数据流的核心思想•处理数据流的核心思想–能过循环处理每个数据单元,直到遇到结束符或出现异常(Exception)•结束符–在Unix操作系统下,键入Control-D表示数据流的结束–在Windows操作系统下,键入Control-Z表示数据流的结束2020/5/248类InputStream•类java.io.InputStream是一个抽象(abstract)类,声明了从原始字节数据流读入数据的基本方法•类中声明的方法:publicabstractintread()throwsIOExceptionpublicintread(byte[]data)throwsIOExceptionpublicintread(byte[]data,intoffset,intlength)throwsIOExceptionpubliclongskip(longn)throwsIOExceptionpublicintavailable()throwsIOExceptionpublicvoidclose()throwsIOExceptionpublicvoidmark(intreadlimit)publicvoidreset()throwsIOExceptionpublicbooleanmarkSupported()2020/5/249以字节为单位读入数据•类InputStream的成员方法read()读入单个无符号字节(unsignedbyte)的数据,并返回一个整数类型(int)的值(与读入的无符号字节数据相对应)•正常返回:介于0和255之间的一个数•如果遇到数据流结束,则返回-1publicabstractintread()throwsIOException2020/5/2410方法read()•下面的两个方法可以一次读入多个字节到数组中•java.io.InputStreampublicintread(byte[]data)throwsIOExceptionpublicintread(byte[]data,intoffset,intlength)throwsIOException2020/5/2411关闭数据流•当处理完数据流时,应当关闭该数据流,以便释放该数据流所关联的资源publicvoidclose()throwsIOException2020/5/2412示例【例7-1】屏幕输入回显例程2020/5/2413输出流•与InputStream相似,OutputStream也是abstract类•类中的成员方法:publicabstractvoidwrite(intb)throwsIOExceptionpublicvoidwrite(byte[]data)throwsIOExceptionpublicvoidwrite(byte[]data,intoffset,intlength)throwsIOExceptionpublicvoidflush()throwsIOExceptionpublicvoidclose()throwsIOException•有时输出流会先输出到缓存中,最后再一起将数据写到指定的位置(如文件)。方法flush()可以强制进行输出,即强制将数据写到指定的位置(如文件/标准输出)2020/5/2414示例【例7-2】输出流的应用例程2020/5/2415Print数据流•类java.io.PrintStream是非常重要的输出流类–System.out就是其类型的变量特性:1、包含直接输出多种数据类型的不同成员方法;2、大部分成员方法不抛出异常;3、可以选择是否采用自动强制输出特性;2020/5/2416Print数据流publicPrintStreamprintf(Stringformat,Object…args)采用格式字符串指定数据,并将数据写入到当前文件中,格式字符串定义的基本形式:%[参数索引$][字符集类型][宽带][.精度]变换类型2020/5/2417示例【例7-3】PrintStream的应用例程2020/5/2418文件与数据流•包java.io中含有对文件进行处理的类–FileInputStream以字节为单位从文件中输入数据–FileOutputStream以字节为单位输出数据到文件中–FileReader以字符为单位读取文件数据–FileWriter以字符为单位写数据到文件中–随机访问文件•RandomAccessFile2020/5/2419从文件中输入•类java.io.FileInputStream表示从文件中输入字节数据的输入流(InputStream)•类中的成员方法:publicFileInputStream(Stringname)throwsFileNotFoundExceptionpublicFileInputStream(Filefile)throwsFileNotFoundExceptionpublicFileInputStream(FileDescriptorfdObj)publicnativeintread()throwsIOExceptionpublicintread(byte[]data)throwsIOExceptionpublicintread(byte[]data,intoffset,intlength)throwsIOExceptionpublicnativelongskip(longn)throwsIOExceptionpublicnativeintavailable()throwsIOExceptionpublicnativevoidclose()throwsIOExceptionpublicfinalFileDescriptorgetFD()throwsIOException2020/5/2420从文件中输入•文件读操作步骤:1、创建类java.io.FileInputStream的实例对象,以获取相关的文件资源;2、通过类java.io.FileInputStream的read成员方法将数据从文件读入内存;3、最后调用类java.io.FileInputStream的close成员方法,关闭文件,以释放所占用的系统资源;2020/5/2421示例【例7-4】FileInputStream的应用例程2020/5/2422写数据到文件中•类java.io.FileOutputStream表示将字节数据写入到文件中的输出流(OutputStream)•类中的成员方法:publicFileOutputStream(Stringname)throwsIOExceptionpublicFileOutputStream(Stringname,booleanappend)throwsIOExceptionpublicFileOutputStream(Filefile)throwsIOExceptionpublicFileOutputStream(FileDescriptorfdObj)publicnativevoidwrite(intb)throwsIOExceptionpublicvoidwrite(byte[]data)throwsIOExceptionpublicvoidwrite(byte[]data,intoffset,intlength)throwsIOExceptionpublicnativevoidclose()throwsIOExceptionpublicfinalFileDescriptorgetFD()throwsIOException2020/5/2423•文件读操作步骤:1、创建类java.io.FileOutputStream的实例对象,以获取相关的文件资源;2、通过类java.io.FileOutputStream的write成员方法将数据写入文件,在这中间,还可以通过类java.io.FileOutputStream的flush成员方法强制输出;3、最后调用类java.io.FileInputStream的close成员方法,关闭文件,以释放所占用的系统资源;写数据到文件中2020/5/2424示例【例7-5】FileOutputStream的应用例程J_WriterFile.java2020/5/2425带缓存的数据流•输入/输出(I/O)的缓存机制:–提高输入/输出(I/O)性能的一种方法•输入/输出(I/O)往往很慢,常常是计算机处理事务的瓶颈•一次输入/输出大量数据比分成很多次输入/输出要快很多–将输出数据暂时放在内存中的某个位置(称为缓存)–整个缓存写到指定位置(如硬盘)•类java.io.BufferedInputStream和类java.io.BufferedOutputStream是带缓存的输入/输出流2020/5/2426带缓存的数据流•构造方法:publicBufferedInputStream(InputStreamin)publicBufferedInputStream(InputStreamin,intsize)publicBufferedOutputStream(OutputStreamout)publicBufferedOutputStream(OutputStreamout,intsize)•最佳缓存大小高度依赖于机器平台以及输入/输出的数据大小2020/5/2427示例【例7-6】J_BufferedInputStream.java比较带与不带缓存在读取数据时的效率比较2020/5/2428本章总体纲要•输入流与输出流•随机访问文件•读写器•文件类File2020/5/2429随机访问文件•前面介绍的输入流和输出流在对文件进行操作时一般都是顺序的读取或存取数据,而且读取数据和存取数据必须使用不同的类。•随机访问文件方式可以在指定位置读/写字节内容publicRandomAccessFile(Stringname,Stringmode)throwsFileNotFoundExceptionName文件名Mode文件的访问方式2020/5/2430运用RandomAccessFile•当RandomAccessFile的实例对象与某个文件相关联–在指定位置读取或写出数据,位置指定方法如下:•voidseek(long
本文标题:网络程序设计(java)第07章 文件与数据流new
链接地址:https://www.777doc.com/doc-5532098 .html