




已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章流式输入输出与文件处理 9 1输入输出基本概念9 2面向字节的输入输出9 3面向字符的输入输出9 4文件处理9 5对象串行化 9 1 1I O设备与文件 1 I O设备分类存储设备存储设备包括硬盘 软盘 光盘等 输入 输出设备输入设备有键盘 鼠标 扫描仪等输出设备有显示器 打印机 绘图仪等 2 文件的分类根据数据的组织方式分为文本文件 存放的是ASCII码 或其它编码 表示的字符二进制文件 具有特定结构的数据 9 1 2流的概念 流的定义流是在计算机的输入输出操作中流动的数据系列 输出流是往存储介质或数据通道中写入数据输入流是从存储介质或数据通道中读取数据 流的特性与分类 2 流的特性先进先出 顺序存取 只读或只写 3 Java流的处理分类面向字节的流 数据的处理是以字节为基本单位 面向字符的流 用于字符数据的处理 4 Java系统预定义的流对象 标准输入 System in InputStream类型 通常代表键盘输入 标准输出 System out PrintStream类型 通常写往显示器 标准错误输出 System err PrintStream类型 通常写往显示器 标准输入输出在实际运行时的具体目标对象也可能变化 System类中提供了如下方法重新设置标准流对象 staticvoidsetIn InputStreamin 重新定义标准输入流staticvoidsetErr PrintStreamerr 重新定义标准错误输出staticvoidsetOut PrintStreamout 重新定义标准输出 1 面向字节的输入流的类继承层次 9 2面向字节的输入 输出流 2 类InputStream介绍 publicintread 读一个字节publicintread byteb 读多个字节到字节数组publicintread byte b intoff intlen 从输入流读指定长度的数据到字节数组 数据从字节数组的off处开始存放 publiclongskip longn 指针跳过n个字节 定位输入位置指针的方法publicvoidmark 在当前位置指针处做一标记publicvoidreset 将位置指针返回标记处publicvoidclose 关闭流 3 类InputStream的子类的使用 3 类InputStream的子类的使用 续表 4 类FilterInputStream的常见子类 例9 1在屏幕上显示文件内容 importjava io publicclassDisplayFile publicstaticvoidmain Stringargs try FileInputStreaminfile newFileInputStream args 0 intbyteRead infile read while byteRead 1 System out print char byteRead byteRead infile read catch ArrayIndexOutOfBoundsExceptione System out println 需要提供一个文件名作为命令行参数 catch FileNotFoundExceptione System out println filenotfind catch IOExceptione 数据输入流 DataInputStream 为了实现各种基本类型数据的输入处理实现DataInput接口readByte readBoolean readShort readChar readInt 读整数readLong readFloat readDouble readUTF 读字符串 例9 2从键盘输入一个整数 求该数的各位数字之和 importjava io publicclassBitSum publicstaticvoidmain Stringargs throwsIOException DataInputStreamdin newDataInputStream System in System out print inputainteger intx din readInt intsum 0 intn x while n 0 intlastbit n 10 n n 10 sum sum lastbit System out println x 的各位数字之和 sum 2 面向字节的输出流 2 文件输入 输出流的使用 类OutputStream的方法 publicvoidwrite intb 将参数b的低字节写入输出流publicvoidwrite byteb 将字节数组全部写入输出流publicvoidflush 强制将缓冲区数据写入输出流对应的外设publicvoidclose 关闭输出流 例9 3将一个大文件分拆为若干小文件importjava io publicclassBigToSmall publicstaticvoidmain Stringargs intnumber 0 finalintsize Integer parseInt args 1 byte b newbyte size try FileInputStreaminfile newFileInputStream args 0 while true FileOutputStreamoutfile newFileOutputStream file number number intbyteRead infile read b if byteRead 1 break outfile write b 0 byteRead outfile close catch IOExceptione 基本数据类型数据的读写问题 类DataOutputStream实现各种类型数据的输出处理 它实现了DataOutput接口writeByte int writeBytes String writeBoolean boolean writeChars String writeInt int writeLong writeFloat float writeDouble double writeUTF String 等 例9 4找出10 100之间的所有姐妹素数 写入到文件中 所谓姐妹素数是指相邻两个奇数均为素数 importjava io publicclassFindSisterPrime publicstaticbooleanisPrime intn for intk 2 k Math sqrt n k if n k 0 returnfalse returntrue publicstaticvoidmain String arguments try FileOutputStreamfile newFileOutputStream x dat DataOutputStreamout newDataOutputStream file for intn 11 n 100 n 2 if isPrime n x Dat文件 FileOutputStream DataOutputStream 数据 importjava io publicclassOutSisterPrime publicstaticvoidmain String arguments try FileInputStreamfile newFileInputStream x dat DataInputStreamin newDataInputStream file try while true intn1 in readInt intn2 in readInt System out println n1 n2 catch EOFExceptione in close catch IOExceptione 1 面向字符的输入流类层次 9 3面向字符的输入 输出流 表9 4类Reader的主要子类及说明 表9 4类Reader的主要子类及说明 续 LineNumberReader类的使用 例9 5从一个文本文件中读取数据加上行号后显示 importjava io publicclassAddLineNo publicstaticvoidmain String args try FileReaderfile newFileReader AddLineNo java LineNumberReaderin newLineNumberReader file booleaneof false while eof Stringx in readLine if x null 是否读至文件尾eof true elseSystem out println in getLineNumber x in close catch IOExceptione 例9 6 例9 5 续 2 面向字符的输出流类层次 表9 5类Writer的主要子类及说明 表9 5类Writer的主要子类及说明 续 例9 6用FileWriter流将ASCII英文字符集字符写入到文件 importjava io publicclassCharWrite publicstaticvoidmain Stringargs try FileWriterfw newFileWriter charset txt for inti 32 i 126 i fw write i fw close catch IOExceptione 类Writer提供的方法与OutputStream类似 只是将基于Byte的参数改为基于Char FileWriter继承Writer类 几种常用形态如下 publicvoidwrite intc 往文件写入一个字符 它是将整数的低16位对应的数据写入文件 高16位将忽略 publicvoidwrite char cbuf 将一个字符数组写入文件publicvoidwrite Stringstr 将一个字符串写入文件 注意 第一种形式不能处理汉字 要将汉字写入文件可以使用后面两种形式 9 4转换流 转换输入流InputStreamReader 在字节流和字符流间架起了一道桥梁 BufferedReaderin newBufferedReader newInputStreamReader System in 9 4 2转换输出流 OutputStreamWriter 类OutputStreamWriter是Writer的子类 一个OutputStreamWriter对象将UTF 16字符转换为指定的字符编码形式写入到字节输出流 类OutputStreamWriter的常用构造方法有 publicOutputStreamWriter OutputStreamout 创建转换输出流 按默认字符集的编码往输出流写数据 publicOutputStreamWriter OutputStreamout Charsetc 创建转换输出流 按指定字符集的编码往输出流写数据 publicOutputStreamWriter OutputStreamout Stringenc throwsUnsupportedEncodingException 创建转换输出流 按名称所指字符集的编码往输出流写数据 1 Java程序的文件与目录管理 1 创建一个新的文件对象File Stringpath File Stringpath Stringname 例 myFile newFile etc motd File Filedir Stringname 9 5文件处理 2 获取文件或目录属性 StringgetName 返回文件名StringgetPath StringgetAbsolutePath StringgetParent booleanexists booleancanWrite booleancanRead booleanisFile booleanisDirectory longlastModified longlength 3 文件或目录操作 booleanrenameTo FilenewName booleanmkdir String list voiddelete booleanequals Filef 例9 8显示若干文件的基本信息 importjava io classfileinfo staticFilefileToCheck publicstaticvoidmain Stringargs throwsIOException if args length 0 for inti 0 i args length i fileToCheck newFile args i info fileToCheck else System out println Nofilegiven publicstaticvoidinfo Filef throwsIOException System out println Name f getName System out println Path f getPath System out println AbsolutePath f getAbsolutePath if f exists System out println Fileexists System out println andisReadable f canRead System out println andisWriteable f canWrite System out println Fileis f length bytes else System out println Filedoesnotexist 2 文件的顺序访问 1 FileInputStream对象 1 利用文件名创建文件输入流newFileInputStream etc motd 2 利用文件对象创建文件输入流2 从FileInputStream读数据 intread intread byteb intread byteb intoffset intlen 3 关闭FileInputStream注 文件输出流FileOutputStream类似 3随机访问文件 创建随机访问文件用文件名myRAFile newRandomAccessFile Stringname Stringmode 用文件对象myRAFile newRandomAccessFile Filefile Stringmode 其中 mode参数决定了访问文件的权限 如只读 r 或读写 wr 等 2 对文件位置指针的操作 可以使用在DataInputStream和DataOutputStream里出现的所有read 和write 函数 还有几个函数帮助你在文件里移动指针 longgetFilePointer 返回当前指针voidseek longpos 将文件指针定位到一个绝对地址 地址是相对于文件头的偏移量 地址0表示文件的开头 longlength 返回文件的长度 1 对象输入流和对象输出流 writeObject 和readObject 方法实现了对象的串行化 Serialized 和反串行化 Deserialized 例9 11系统对象的串行化处理程序1 将系统对象写入文件importjava io importjava util publicclasswritedate publicstaticvoidmain Stringargs try ObjectOutputStreamout newObjectOutputStream newFileOutputStream storedate dat out writeObject newDate out writeObject helloworld System out println 写入完毕 catch IOExceptione 程序2 读取文件中的对象并显示出来 importjava io importjava util publicclassreaddate publicstaticvoidmain Stringargs try ObjectInputStreamin newObjectInputStream newFileInputStream storedate dat Datecurrent Date in readObject System out println 日期 current Stringstr String in readObject System out println 字符串 str catch IOExceptione catch ClassNotFoundExceptione 3 用户定义类的对象串行化 例9 12利用对象串行化将各种图形元素以对象形式存储 从而实现图形的保存 程序1 图形对象的串行化设计importjava awt Graphics abstractclassGraphimplementsSerializable 抽象类publicabstractvoiddraw Graphicsg 定义draw方法 classLineextendsGraphimplementsSerializable intx1 y1 intx2 y2 publicvoiddraw Graphicsg g drawLine x1 y1 x2 y2 publicLine intx1 inty1 intx2 inty2 this x1 x1 this y1 y1 this x2 x2 this y2 y2 classCircleextendsGraphimplementsSerializable intx y intr publicvoiddraw Graphicsg g drawOval x y r r publicCircle intx inty intr this x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025一手房购买合同:房产交易协议
- 2025担保借款合同书
- 量子计算投资机遇-洞察及研究
- 2025融资租赁合同模板
- 民宿行业的竞争策略及市场分析
- 2025研发项目总包合同书
- 2025企业间借款合同公证的问题
- 2025联营店铺合作经营合同模板
- 2025租赁合同(文本6)范本
- 涉县双拥联盟管理办法
- 财经法规与会计职业道德(经管类专业)全套教学课件
- 2024年人教版八年级上册物理全册教学课件(新版教材)
- 2021年秋新教科版六年级上册科学全册表格式教案
- 碳谱定量分析方法
- 机械购销合同电子版
- 蓄热式焚烧装置(RTO)
- 2024-2034年中国女式情趣内衣市场发展现状及战略咨询报告
- FZT 51005-2011 纤维级聚对苯二甲酸丁二醇酯(PBT)切片
- 配电网自动化终端典型缺陷处理
- 五星级酒店总投资估算表及其投资占比
- 兼职市场总监合同
评论
0/150
提交评论