




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章输入输出流,主讲:赵建邦办公室:信息学院202E-mail:zhaojianbang,2,本章主要内容,8.1什么是javaIO8.2File类8.3字节流和字符流8.4随机流8.5数组流8.6数据流8.7对象流8.8序列化与对象克隆难点:序列化与对象克隆,8.1什么是javaIO,IO(Input/Output)是计算机输出/输出的接口。Java的核心库java.io提供了全面的IO接口,包括:文件读写,标准设备输出等等。Java中的IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入,8.1.1输入输出流示意图,输入流示意图,输出流示意图,源,目的地,数据源和目的地可以来自于文件、内存和网络等,8.1.2java.io的分类,总体来说,IO有四个顶层类:字节流处理单元为1个字节,操作字节和字节数组字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,字节流,字符流,注意,这四个类为抽象类,不能直接用来创建对象,8.2File类,1、创建文件File(Stringfilename);File(stringdirectoryPath,Stringfilename);File(Filefp,Stringfilename);f.createNewFile();2、删除文件f.delete();例FileTest.java,注:delete方法删除由File对象的路径所表示的磁盘文件。它只能删除普通文件,而不能删除目录,即使是空目录也不行。,8.2File类,3、文件的属性关于File类的其它方法,是不需要死记硬背的,在需要时可以查看JDK文档,就会明白怎么使用。初步接触了File类,我们发现File类不能访问文件的内容,即不能够从文件中读取数据或往文件里写数据,它只能对文件本身的属性进行操作:创建、删除、重命名、判断读写权限、设置和查询最近修改时间等4、运行可执行文件例FileRuntimeTest.java,8.2File类,5、创建目录publicbooleanmkdir()方法创建目录6、罗列目录中的文件publicStringlist();publicFilelistFiles();添加文件名过滤器(FilenameFilter)参数publicStringlist(FilenameFilterobj);publicFilelistFiles(FilenameFilterobj);需要实现FilenameFilter接口的accept方法例12.2,8.3字节流和字符流,8.3字节流和字符流,8.3.1文件字节流,创建FileInputStream对象以字节为单位读取文件(注意返回值不一样)intread()/返回字节值intread(byteb)/返回读取的字节个数intread(byteb,intoff,intlen),FileInputStreaminOne=newFileInputStream(hello.test);Filef=newFile(hello.test);FileInputStreaminTwo=newFileInputStream(f);,8.3.1文件字节流,FileOutputStream以字节为单位写文件publicvoidwrite(byteb)publicvoidwrite(byteb,intoff,intlen)调用close()方法关闭流由于汉字在内存中占用两个字节,如果使用字节流,读取不当会出现乱码现象例FileStream.java,8.3.2文件字符流,文件字符流的源和目的地是文件FileReader(Stringfilename)FileReader(Filefilename)FileWriter(Stringfilename)FileWriter(Filefilename)read()和write()方法以字符为基本单位处理数据流write()方法使用缓冲区例FileReaderTest.java,8.3.3缓冲流,当程序处理的文件按行组织,并且行不是定长时,可采用缓冲式输入输出方式,简化操作缓冲式输入:对于程序的输入请求,系统一次性输入足够多的内容放在内存缓冲区中,供程序以后的输入请求使用,待缓冲区的内容用完,再一次性输入足够多的数据缓冲式输出:对于程序的输出请求,系统先将内容暂存于缓冲区,待缓冲区满或输出结束,才将暂存与缓冲区中的内容输出到流的目的地,8.3.3缓冲流,/*创建一个FileReader对象.*/FileReaderfr=newFileReader(mytest.txt);/*创建一个BufferedReader对象.*/BufferedReaderbr=newBufferedReader(fr);/*读取一行数据.*/Stringline=br.readLine();while(line!=null)System.out.println(line);line=br.readLine();/*流的关闭.*/br.close();fr.close();,创建一个FileReader对象,创建一个BufferedReader对象,用BufferedReader读文本文件,8.3.3缓冲流,用BufferedWriter写文本文件,/*创建一个FileWriter对象*/FileWriterfw=newFileWriter(mytest.txt);/*创建一个BufferedWriter对象*/BufferedWriterbw=newBufferedWriter(fw);bw.write(大家好!);bw.write(我正在学习BufferedWriter。);bw.newLine();bw.write(请多多指教!);bw.newLine();bw.flush();fw.close();,创建一个BufferedWriter对象,创建一个FileWriter对象,8.3.3缓冲流,上层流上层流的源和目的地是输入流或输出流。上层流封装了其他输入输出流,提供缓冲、格式化等多功能输入输出如缓冲流、数据流、对象流等底层流直接从文件、内存、网络中读取字节(每次一个),8.4随机流,RandomAccessFile直接继承自Object类随机流创建的流的指向可以是源也可以是目的地,但仅限于操作文件myRAFile=newRandomAccessFile(Stringname,Stringmode);myRAFile=newRandomAccessFile(Filefile,Stringmode);mode的取值为“r”或“rw”seek(longa):文件位置指示器getFilePointer():当前的读写位置例RandomFileTest.java,8.5数组流,数组流包括字节数组流和字符数组流,用于操作内存数据问题:对数组的读写非常简单,我们为什么不直接读写字节数组呢?,内存虚拟文件或者是内存映像文件,是把一块内存虚拟成一个硬盘上的文件,原来该写到硬盘文件上的内容会被写到这个内存中,原来该从一个硬盘文件上读取内容可以改为从内存中直接读取。如果程序在运行过程中要产生一些临时文件,就可以用虚拟文件的方式来实现,我们不用访问硬盘,而是直接访问内存,会提高应用程序的效率。,8.5数组流,ByteArrayInputStream的每个构造函数都需要一个字节数组来作为数据源:ByteArrayInputStream(bytebuf)ByteArrayInputStream(bytebuf,intoffset,intlength)ByteArrayOutputStream也有两种构造方法:ByteArrayOutputStream()ByteArrayOutputStream(int)第一种形式的构造函数创建一个32字节的缓冲区,第二种形式则是根据参数指定的大小创建缓冲区,缓冲区的大小在数据过多时能够自动增长。例ByteArrayTest.java,8.6数据流,DataInputStream与DataOutputStream提供了可以读写各种基本数据类型的数据的各种方法UTF字符编码规则:假如字符c的范围在u0001和u007f之间,对应的UTF码占一个字节,内容为:(byte)c。假如字符c是u0000或其范围在u0080和u07ff之间,对应的UTF码占两个字节,内容为:(byte)(0 xc0|(0 x1fObjectOutputStreamos=newObjectOutputStream(fos);os.writeObject(stu);/stu是一个Student对象os.close();FileInputStreamfi=newFileInputStream(mytext.txt);ObjectInputStreamsi=newObjectInputStream(fi);stu=(Student)si.readObject();si.close();,8.8序列化与对象克隆,clone()方法生成一个新的克隆对象,该对象与原对象具有不同的引用通过序列化(Serialize)可以方便地实现对象的克隆将原对象写入输出流目的地(序列化)将
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年安全员考试高频难点题库
- 2025年政府会计准则医院考题预测
- 吉安县2025届中考猜题数学试卷含解析
- 迎新年春节致辞模板
- 2025年电力行业高级专家认证考试模拟题电力电缆方向及答案解析
- 2025年本科院校保卫处面试模拟题与参考答案
- 2025年事业单位地震招考高频题解
- 2025年品牌营销经理专业能力测评试题及答案解析
- 2025年建筑智能楼宇设计师资格考试试题及答案解析
- 2025年计算机信息安全专员职业水平考察试卷及答案解析
- 2025海南省老干部服务管理中心招聘事业编制人员6人(第1号)考试备考题库及答案解析
- 2025年内江市总工会公开招聘工会社会工作者(14人)笔试模拟试题及答案解析
- 2025云南辅警笔试题目及答案
- 2025四川内江市总工会招聘工会社会工作者14人笔试备考试题及答案解析
- 2025-2026学年湘教版(2024)初中数学八年级上册教学计划及进度表
- GB/T 45763-2025精细陶瓷陶瓷薄板室温弯曲强度试验方法三点弯曲或四点弯曲法
- 全过程工程咨询投标方案(技术方案)
- (高清版)DZT 0388-2021 矿区地下水监测规范
- 双高专业群电子商务专业群申报书
- 有害物质污染源识别与评价表
- 餐具洗消保洁制度管理办法
评论
0/150
提交评论