




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9讲流式I/O和文件,目的,描述和使用java.io包的流式思想构造文件和过滤器流,并恰当地使用它们区别流与读者和作者,并进行合适的选择考察并操作文件和目录读、写和更新文本和数据文件,数据流,Java所有的I/O机制都是基于数据流的,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。,Java.io包,Java.io是大多数面向数据流的输入/输出类的主要软件包。这个软件包包含了两个抽象类,InputStream和OutputStream。所有其它面象数据流的输入/输出类都要扩展这两个基类。importjava.io.*,数据流,两种基本的流:输入流和输出流可以从输入流读,不能对它写。要从输入流读取字节,必须有一个与这个流相关联的字符源。结点流,即它们可以从一个特定的地方读写,例如磁盘或者一块内存。过滤器流,一个过滤器输入流是用一个到已存在的输入流的连接创建的。此后,当你试图从过滤输入流对象读时,它向你提供来自另一个输入流对象的字符。,InputStream(输入流),定义了Java流式字节输入模式的抽象类。该类的所有方法在出错条件下引发一个IOException异常。,InputStream定义的方法,OutputStream(输出流),定义了Java流式字节输出模式的抽象类。该类的所有方法在出错条件下引发一个IOException异常。,OutputStream定义的方法,FileInputStream和FileOutputStream,这些类是结点流,它们使用磁盘文件。构造函数允许你指定它们所连接的文件。要构造一个FileInputStream,所关联的文件必须存在而且是可读的。如果你要构造一个FileOutputStream而输出文件已经存在,则它将被覆盖。FileInputStreaminfile=newFileInputStream(myfile.dat);FileOutputStreamoutfile=newFileOutputStream(results.dat);,BufferInputStream和BufferOutputStream,过滤器流,用来从基于字符的输入和输出流中读取和写入文本。可以提高I/O操作的效率。,DataInputStream和DataOutputStream,过滤器流,从stream中读取基本类型(int,char等)数据。DataInputStream方法bytereadByte()longreadLong()doublereadDouble()DataOutputStream方法voidwriteByte(byte)voidwriteLong(long)voidwriteDouble(double)有读写字符串的方法,但不提倡使用这些方法。它们已经被后面Reader和Writer所取代。,PipedInputStream和PipedOutputStream,管道流用来在线程间进行通信。一个线程的PipedInputStream对象从另一个线程的PipedOutputStream对象读取输入。要使管道流有用,必须有一个输入方和一个输出方。,I/O流的链接,FileInputStream,BufferedInputStream,DataInputStream,数据,DataOutputStream,BufferedOutputStream,FileOutputStream,数据,从文件中获取输入字节,增加了缓冲的功能,增加了读取Java基本数据类型的功能,InputStreamChain,OutputStreamChain,可以往输出流中写入Java基本数据类型,提供数据写入到缓冲区的功能,将数据写入到文件中,Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。,Reader和Writer,Java技术使用Unicode来表示字符串和字符,而且它提供了16位版本的流,以便用类似流的方法来处理字符。这些16位版本的流称为Reader和Writer。和流一样,它们都在java.io包中。,InputStreamReader和OutputStreamWriter,用来作为字节流与读者和作者之间的接口。构造一个InputStreamReader或OutputStreamWriter时,转换规则定义了16位Unicode和其它平台的特定表示之间的转换。使用转换模式,Java技术能够获得本地平台字符集的全部灵活性,同时由于内部使用Unicode,所以还能保持平台独立性。,BufferedReader和BufferedWriter,BufferedReader是Reader的一个子类,它具有缓冲的作用,避免了频繁的从物理设备中读取信息。它有以下两个构造函数:BufferedReader(Readerin)BufferedReader(Readerin,intsz)sz是指定缓冲区的大小。,文件,File类提供了处理文件和获取它们基本信息的方法。创建文件:FilemyFile;myFile=newFile(mymotd);myFile=newFile(/,mymotd);FilemyDir=newFile(/);myFile=newFile(myDir,mymotd);,文件名,StringgetName()StringgetPath()StringgetAbsolutePath()StringgetParent()booleanrenameTo(FilenewName),文件测试,booleanexists()booleancanWrite()booleancanRead()booleanisFile()booleanisDirectory()booleanisAbsolute(),通用文件信息和工具,longlastModified()longlength()booleandelete(),目录工具,booleanmkdir()Stringlist(),文本输出,进行文本输出时,通常需要使用PrintWriter,它可通过文本格式打印(显示)字串及数字,尽管提供了输出方法,但没有定义目的地。因此,个PrintWriter必须同一个目标Writer并列一起。PrintWriterout=newPrintWriter(newFileWriter(data.txt);亦可将PrintWriter同一个目标(输出)流合并到一起。PrintWriterout=newPrintWriter(newFileOutputStream(data.txt),文本输入,用来处理文本输入的是BufferedReader方法。该方法又内含了一个方法ReadLine(),可以用它读取整行文本。要将BufferedReader同一个输入源合并起来。Strings;BufferedReaderin=newBufferedReader(newFileReader(data.txt)while(s=in.ReadLine()!=null).,StringTokenizer(字串记号器)类,将读取的数据分割成为单独的字串。即,找出其中的定界符,然后分离出其中独立的内容。Java.unit中的StringTokenizer类可以分解一个包含了定界文本的大字串。将一个StringTokenizer对象和一个字串联系起来。构建StringTokenizer对象时,需要同时指出哪些字符作为定界符使用。StringTokenizert=newStringTokenizer(line,|);可在字串中指定多个定界符StringTokenizert=newStringTokenizer(line,tnr);,nextToken()返回下一个记号;如果不再有更多的记号,则产个NosuchElementExceptionhasMoreTokens()countTokens(),Java程序设计试题,一个商店出售图书,图书的原始信息(卡片代码,卡片名称,单价)放在文件“books.txt”中,写一个程序统计图书销售情况,每种图书的初始库存为100。,基本功能要求,在主窗口通过一个textArea显示销售信息在主窗口能输入并处理每次的销售情况注意在输入图书销售信息时一定要是库存中有的图书,而且数量不能超过库存。通过按钮打开一个frame显示图书库存信息。通过按钮打开一个frame显示销售的统计信息图表(可选)通过按钮将销售信息写入一文本文件“sales.txt”并退出系统。,图1主窗口,图2图书库存窗口,图3统计窗口,图书的信息保存在文件“cards.txt”中,格式如下:图书编号名称单价001Java程序设计25002高等数学39.9003大学英语18,销售信息文件“sales.txt”的格式如下:一个标题每种图书的销售信息,包括销售编号,销售员名称,销售数量,单价,总价。一行该书销售总量的统计信息。,图书销售统计=002号高等数学图书:单价39.9C004张三5039.9=1995C001李四4039.9=1596C006李四1039.9=399=总销量:1003990=,通过三个文本框输入新的销售信息销售员姓名(如果没有输入,显示message,停止继续处理)图书编号(如果没有输入或输入的编号不存在,显示message,停止继续处理)销售数量(如果没有输入或为负数或大于库存,显示message,停止继续处理)通过两个按钮处理销售信息通过一个按钮提交销售信息,在销售情况文本区显示,并更新库存。通过一个按钮清除输入的信息。,提交要求,提交源程序,包括下列程序:1主程序名TestProg.java2.主窗口类BooksSalesFrame.java3统计图表窗口ChartFrame.java4库存信息窗口BookFrame.java5图书类Book.java6.图书
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025《合同附加协议》
- 2025工程设备租赁合同范文
- 2025超市物业管理合同范本
- 语言信息处理知到课后答案智慧树章节测试答案2025年春大连东软信息学院
- 2025健身设备采购合同书律师拟定版本
- 2025自然人向企业借款合同范本参考
- 四年级上册数学教案-1.5近似数 |北师大版
- 2025智能合同管理系统优化方案
- 2024年山东大学第二医院医师岗位招聘真题
- 2024年南平市市属事业单位考试真题
- 能力验证课件
- 病例报告表(CRF)模板
- 计量经济学期末考试题库(完整版)及答案
- 安保工作“智能化、网格化”管理模式的建立及持续改进工作
- 履带底盘的组成介绍及各参数的计算
- 资产评估收费管理办法中评协[2009]199号
- 贾平凹《秦腔》
- 联轴器找中心PPT课件
- 加 工 贸 易 手 册
- CDP指标介绍及应用
- 浙江省建设工程施工取费定额(2003版)完整版
评论
0/150
提交评论