




已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章输入 输出处理 7 1字节流 7 1 1InputStream类 InputStream类及其子类的对象表示一个字节输入流 表列出了InputStream类的几个常用方法 7 1 2OutputStream类 OutputStream类及其子类的对象表示一个字节输出流 表列出了OutputStream类的几个常用方法 7 1 2OutputStream类 例7 1 从键盘读入汉字 输出汉字的机内码 importjava io publicclassEx IOStream1 publicstaticvoidmain String args InputStreamis System in 虽然InputStream是抽象类 仍可定义该类型的引用 System in是它的子类的对象 子对象当作父对象使用 intch try while ch is read 1 System out println ch catch IOExceptione System out println e 7 1 2OutputStream类 在程序中可以不必定义InputStreamis 将is read 直接改为System in read 即可 7 2 1文件字节流的顺序处理 FileInputStream类的对象表示一个文件字节输入流 在生成FilelnputStream类的对象时 若指定的文件找不到 则抛出FileNotFoundException异常 该异常必须捕获或声明抛出 例7 2 将任意类型的文件c t1 dat文件复制到d t2 dat importjava io publicclassFileCopy publicstaticvoidmain String args FileInputStreamfis null FileOutputStreamfos null intc try fis newFileInputStream c t1 dat 文件二进制输入流while c fis read 1 每次从输入流中读入一个字节while c fis read 1 每次从输入流中读入一个字节 7 2 1文件字节流的顺序处理 fos write c 写到输出流中 catch FileNotFoundExceptione1 System out println e1 catch IOExceptione2 System out println e2 finally try if fis null fis close if fos null fos close catch IOExceptione3 System out println e3 7 2 2文件字节流的随机读写 在Java中 RandomAccessFile类的一个对象提供了对随机读写文件的支持 它没有继承InputStream和OutputStream 而是直接继承于Object 并且实现接口DataInput和DataOuput 读写模式 如 RandomAccessFileraf newRandomAccessFile c t dat r 表示对文件c t dat进行随机文件读操作 又如 RandomAccessFileraf newRandomAccessFile c t2 dat rw 表示对文件c t2 dat进行随机文件的读 写操作 因此随机读写文件首要操作是移动文件指针 其操作有以下三个 longgetFilePointer 得到当前的文件指针位置 voidseek longpos 移动文件指针到指定的位置 从0开始计算位置 intskipBytes intn 将文件指针向文件末尾移动指定的n个字节 返回实际移动的字节数 7 2 2文件字节流的随机读写 例7 3 随机文件读写 向c t dat文件写入10个double型的实数 然后随机修改其中的数值 importjava io publicclassEx RandomRW publicstaticvoidmain String args throwsException RandomAccessFileraf newRandomAccessFile c t dat rw finalintDOUBLE SIZE 8 一个Double的大小是8字节for inti 0 i 10 i 写入10个Double数值 raf writeDouble i System out print double i System out println raf close RandomAccessFileraf1 newRandomAccessFile c t dat rw 修改第三个double值raf1 seek 3 DOUBLE SIZE 7 2 2文件字节流的随机读写 raf1 writeDouble 300 修改第五个double值raf1 seek 5 DOUBLE SIZE raf1 writeDouble 500 raf1 close 验证是否已修改RandomAccessFileraf2 newRandomAccessFile c t dat r for inti 0 i 10 i System out print raf2 readDouble System out println raf2 close 例7 3 随机文件读写 向c t dat文件写入10个double型的实数 然后随机修改其中的数值 7 2 2文件字节流的随机读写 例7 4 创建10个点对象 写入c t1 dat中 然后随机修改对象内容 importjava io classPoint privateintx 点的x坐标privateinty 点的y坐标publicPoint intx inty 构造函数 用于生成点对象 this x x this y y publicStringtoString 重写该方法 以指定格式输出 return x y publicvoidwritePoint RandomAccessFilef throwsIOException 在当前位置写点 x y 对象f writeInt x f writeInt y 7 2 2文件字节流的随机读写 例7 4 创建10个点对象 写入c t1 dat中 然后随机修改对象内容 publicvoidwritePoint RandomAccessFilef intn throwsIOException 在指定的第n位置写点 x y n值从0开始 f seek n 8 移到第n个点的位置 一个点对象大小是8个字节f writeInt x f writeInt y publicstaticPointreadPoint RandomAccessFilef throwsIOException 在当前位置读点对象intx f readInt inty f readInt returnnewPoint x y publicstaticPointreadPoint RandomAccessFilef intn throwsIOException 在第n位置读点对象 n值从0开始 f seek n 8 移到第n个点的位置 一个点对象大小是8个字节intx f readInt inty f readInt returnnewPoint x y 7 2 2文件字节流的随机读写 例7 4 创建10个点对象 写入c t1 dat中 然后随机修改对象内容 publicclassEx RandomPointRW publicstaticvoidmain String args throwsException Pointpt RandomAccessFileraf newRandomAccessFile c t1 dat rw for inti 0 i 10 i 写入10个点对象数据到文件中 pt newPoint i i 创建点对象pt writePoint raf 点对象写入文件System out print pt 按自定义的格式输出点对象 System out println raf close RandomAccessFileraf1 newRandomAccessFile c t1 dat rw 修改第三个点对象值pt newPoint 300 300 pt writePoint raf1 3 修改第五个点对象值pt newPoint 500 500 pt writePoint raf1 5 7 2 2文件字节流的随机读写 raf1 close 验证是否已修改RandomAccessFileraf2 newRandomAccessFile c t1 dat r for inti 0 i 10 i pt Point readPoint raf2 System out print pt System out println raf2 close 程序运行结果 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 0 0 1 1 2 2 300 300 4 4 500 500 6 6 7 7 8 8 9 9 从结果可知 随机修改已成功 7 3文件与目录的处理 File类以平台无关的方式描述一个文件或目录对象的属性 如 名称 文件长度 路径 读 写等 FilenameFilter接口用于对文件名进行过滤 实现FilenameFilter接口的对象可以传给list 方法从而列出文件名符合指定规则的那些文件或目录 FilenameFilter接口的定义十分简单 在JFC中定义如下 publicinterfaceFilenameFilter publicbooleanaccept Filedir Stringname 实现该接口的类 将过滤的代码填写在accept 方法中 7 3文件与目录的处理 例7 5 在屏幕上列出c 下所有内容 importjava io publicclassEx File1 publicstaticvoidmain String args throwsException Filedir newFile c Strings dir list 列出c 下所有内容for inti 0 i s length i System out println s i 屏幕上打印出来 7 3文件与目录的处理 例7 6 在屏幕上列出c 下所有以字母a开头的文件或目录 importjava io classFileNameFilterimplementsFilenameFilter 实现FilenameFilter接口 privateStringprefix 前缀子串publicFileNameFilter Strings prefix s publicbooleanaccept Filedir Stringname 若name不是以prefix开始 则false 否则返回truereturnname startsWith prefix 7 3文件与目录的处理 publicclassEx File2 publicstaticvoidmain String args throwsException Filedir newFile c String s dir list newFileNameFilter a 生成一个前缀是字符a的文件名过滤器对象 并传给list 方法 列出c 下所有文件名以a开头的文件或目录for inti 0 i s length i System out println s i 屏幕上打印出来 例7 6 在屏幕上列出c 下所有以字母a开头的文件或目录 7 3文件与目录的处理 例7 7 目录复制 将一个目录下所有内容全部复制到另一个目录下 importjava io publicclassEx CopyDirectory publicstaticvoidmain String args throwsException if args length 2 System out println 用法 javaEx CopyDirectory源文件或目录目标文件或目录 System exit 1 Filef newFile args 0 源文件或源目录Filed newFile args 1 目标文件或目标目录if f exists System out println 源文件或源目录不存在 System exit 1 7 3文件与目录的处理 if f isDirectory 7 3文件与目录的处理 例7 7 目录复制 将一个目录下所有内容全部复制到另一个目录下 这是一个递归问题 递归方式的目录复制publicstaticvoiddirectoryCopy Strings Stringd throwsException s代表的文件或目录必须存在 Filesf newFile s getCanonicalFile 整理成File对象Filedf newFile d getCanonicalFile 整理成File对象if sf isFile 文件复制fileCopy sf df else 目录复制String lists sf list 源目录下所有内容StringsPath sf getAbsolutePath 源目录绝对路径StringdPath df getAbsolutePath 目的目录绝对路径FilesFile dFile for inti 0 i lists length i 7 3文件与目录的处理 例7 7 目录复制 将一个目录下所有内容全部复制到另一个目录下 这是一个递归问题 对源目录下的每一个文件或子目录System out println sPath 下 lists i sFile newFile sPath lists i 对lists i 内容构造一个File对象dFile newFile dPath lists i 构造一个File对象if sFile isFile fileCopy sFile dFile else 递归复制子目录dFile mkdir 在目的目录下建立新的子目录directoryCopy sFile getAbsolutePath dFile getAbsolutePath 7 4 1DataInputStream和DataOutputStream Java中按照基本数据类型进行读写的是 DataInputStream和DataOutputStream类 这两个类的对象是过滤流 将基本字节输入 输出流 自动转成按基本数据类型进行读写的过滤流 流的串接是指 将一个流与其它流串连起来 以达到数据转换的目的 FileInputStream类的对象是一个字节输入流 每次一个字节 7 4 1DataInputStream和DataOutputStream 表列出了DataInputStream类的一些常用方法 7 4 1DataInputStream和DataOutputStream 表列出了DataOutputStream类的一些常用方法 7 4 1DataInputStream和DataOutputStream 例7 8 从二进制字节文件c t dat中先读入10个int型整数值 然后将其余的所有float型数值读出 importjava io publicclassEx DataIO publicstaticvoidmain String s DataInputStreamdis null intv 0 floatf 0 try dis newDataInputStream newFileInputStream c t dat 将文件c t dat串接成一个DataInputStream流for intk 1 k 10 k 从流中读取10个int整型的值v dis readInt System out print v 7 4 1DataInputStream和DataOutputStream try while true 读取所有剩余的float类型的值 f dis readFloat System out print f catch EOFExceptione1 文件已读入结束 catch Exceptione 注意DataInputStream流中是如何判别读到流结束的 当读到流结束时 抛出EOFException异常 从而结束while true 语句 7 4 2BufferedInputStream和BufferedOutputStream 表列出了BufferedInputStream类的常用方法 7 4 2BufferedInputStream和BufferedOutputStream 表列出了BufferedOutputStream类的常用方法 7 4 2BufferedInputStream和BufferedOutputStream 例7 9 将任意类型的文件c t1 dat文件复制到d t2 dat 用带缓冲的字节流重写 以提高性能 importjava io publicclassBufferedFileCopy publicstaticvoidmain String args FileInputStreamfis null FileOutputStreamfos null BufferedInputStreambis null BufferedOutputStreambos null intc try fis newFileInputStream c t1 dat 文件二进制输入流bis newBufferedInputStream fis 串接成带缓冲的输入流fos newFileOutputStream d t2 dat 文件二进制输出流bos newBufferedOutputStream fos 串接成带缓冲的输出流 7 4 2BufferedInputStream和BufferedOutputStream while c bis read 1 bos write c bos flush 刷新流 强制输出 catch FileNotFoundExceptione1 System out println e1 catch IOExceptione2 System out println e2 finally try if fis null fis close if fos null fos close if bis null bis close if bos null bos close catch IOExceptione3 System out println e3 7 4 3PushbackInputStream PushbackInputStream新增加了一个方法把刚才读过的一个或多个字节再退回到输入流中 表列出了PushbackInputStream类的常用方法 7 5 1Reader和Writer Reader类和Writer类都是抽象类Reader类表示所有字节输入的根类Writer类表示所有字符输出类的根类 表列出了Reader类的常用方法 7 5 1Reader和Writer 表Writer类的常用方法 7 5 2InputStreamReader和OutputStreamWriter 在生成InputStreamReader和OutputStreamWriter类的对象时可以指定编码规范 其它方法与Reader和Writer相同 InputStreamReader类的构造函数 publicInputStreamReader InputStreamin 使用当前平台的缺省的编码规范 将字节输入流in转换成一个字符输入流 publicInputStreamReader InputStreamin Stringenc throwsUnsupportedEncodingException使用指定的编码规范 将字节输入流in转换成一个字符输入流 若使用了非法的编码规范 将抛出UnsupportedEncodingException异常 OutputStreamWriter类的构造函数 publicOutputStreamWriter OutputStreamout 使用当前平台缺省的编码规范 将字节输出流out转换成一个字符输出流 publicOutputStreamWriter OutputStreamout Stringenc throwsUnsupportedEncodingException使用指定的编码规范 将字节输出流out转换成一个字符输出流 若使用了非法的编码规范 将产生UnsupportedEncodingException 以下两个方法 这两个类都支持 publicStringgetEncoding 返回当前字符流所使用的编码规范 publicvoidclose throwsIOException 关闭流 7 5 2InputStreamReader和OutputStreamWriter 例7 10 获取当前平台默认的编码规范 importjava io publicclassEx CharSet publicstaticvoidmain String args InputStreamReaderread newInputStreamReader System in System out println 默认编码规范 read getEncoding 例7 11 从键盘上读入汉字 打印出汉字及其Unicode代码 importjava io publicclassEx InputStreamReader publicstaticvoidmain String s throwsException Readerrd newInputStreamReader System in intc while c rd read 1 System out println 汉字是 char c Unicode c 7 5 2InputStreamReader和OutputStreamWriter 表FileReader类的常用方法 表FileWriter类的常用方法 7 5 3FileReader和FileWriter 例7 12 文本文件的复制 将c t1 txt复制到d t2 txt中 importjava io publicclassEx RW1 publicstaticvoidmain String s throwsException FileReaderfr newFileReader c t1 txt 生成读取文本文件的字符输入流FileWriterfw newFileWriter d t2 txt 生成写文本文件的字符输出流intc while c fr read 1 fw write c fw flush fr close fw close 7 5 3FileReader和FileWriter 例7 13 从键盘上读入任意数量的字符 写入到文件c t txt中 importjava io publicclassEx RW2 publicstaticvoidmain String s throwsException Readerkr newInputStreamReader System in 键盘转换成字符输入流FileWriterfw newFileWriter c t txt 文本文件的字符输出流intc while c kr read 1 fw write c fw flush fw close 7 5 3FileReader和FileWriter 例7 14 将文本文件c t txt中内容在屏幕上显示出来 importjava io publicclassEx RW3 publicstaticvoidmain String s throwsException FileReaderfr newFileReader c t txt intc while c fr read 1 System out print char c fr close 7 5 4BufferedReader和BufferedWriter BufferedReader和BufferedWriter这个带缓冲的字符流 可用于以文本行为基本单位进行处理的场合 表列出了BufferedReader类的常用方法 其它方法都是重写了Reader类中所提供的方法 7 5 4BufferedReader和BufferedWriter 表列出了BufferedWriter类的常用方法 其它方法都是重写了Writer类中所提供的方法 7 5 4BufferedReader和BufferedWriter 例7 15 将文本文件c t txt中内容一行一行地在屏幕上显示出来 每次读取一个文本行 importjava io publicclassEx BufferedReader1 publicstaticvoidmain String args throwsException BufferedReaderbr newBufferedReader newFileReader c t txt 文本文件转换成带缓冲的字符输入流 一次可读取一行 Strings while s br readLine null 当还有文本行可读时System out println s 7 5 4BufferedReader和BufferedWriter 例7 16 从键盘上读入一个整数值n 打印出1 2 n之和 importjava io publicclassEx BufferedReader2 publicstaticvoidmain String args throwsException BufferedReaderkr newBufferedReader newInputStreamReader System in 键盘转换成一个能读取文本行的字符输入流Strings intn 0 intsum 0 k 0 System out println 请输入一个整数值 s kr readLine 从键盘读取一行n Integer parseInt s 转换成整数值for k 1 k n k sum sum k System out println 1 2 n sum 7 5 5PrintWriter Java中引入的PrintWriter类可以很方便地进行此类文本文件的输出 PrintWriter流是文本流中使用频率很高的流 表列出了PrintWriter类的常用方法 7 5 5PrintWriter 例7 17 将100以内的所有素数都打印到文本文件c t txt中 每行5个数 数之间用逗号 分隔 importjava io publicclassEx PrintWriter1 publicstaticvoidmain String args throwsException PrintWriterpw newPrintWriter newFileWriter c t txt true intk j cc 0 again for k 2 k 100 k for j 2 j k 2 j if k j 0 continueagain 若k不是素数则继续下一个 pw print k 向文本文件中输出质数cc if cc 5 每五个换一行 cc 0 pw println elsepw print 向文件中输出逗号 pw close 7 5 6StringReader和StringWriter 通常对String类的对象进行处理时 通过方法charAt i 对字符进行遍历 Java提供了StringReader类和StringWriter类来实现这样的处理 表StringReader类的常用方法 表StringWriter类的常用方法 7 5 6StringReader和StringWriter 例7 18 统计任意一个字符串中所有英文字母或汉字的个数 importjava io publicclassStringRW publicstaticvoidmain String args throwsException Strings ab汉c字 asdf 12 34 67 a6b7c StringReadersr newStringReader s 将串s转换成一个字符流intc 当前字符intcc 0 字母总数while c sr read 1 if Character isLetter c cc 若是英文字母或汉字 则总数加 System out println 源串是 s System out println 字母个数是 cc 7 5 7PushbackReader 表列出了PushbackReader类的常用方法 其它方法都是重写了Reader类中所提供的方法 7 5 7PushbackReader 例7 19 从任意一个字符串中识别出标识符 整数数值及运算符 程序中将StringReader类与PushbackReader类连用 以加深对这些类的理解 7 6 1什么是对象的序列化 java io Serializable接口定义如下 publicinterfaceSerializable Java中提供了对象输入 输出流 java io ObjectInputStream和java io ObjectOutputStream 表列出了ObjectInputStream类的常用方法 表列出了ObjectOutputStream类的常用方法 7 6 1什么是对象的序列化 例7 20 将由10个点对象组成的链表写入c pt ser中 然后再从文件中读回这 个对象 并在屏幕上打印出来 importjava io importjava util classPointimplementsSerializable 由于Point类的对象要存盘 故首先必须实现Serializable接口privateintx privateinty publicPoint intx inty this x x this y y publicPoint intx this x 0 publicPoint this 0 0 publicStringtoString 定制该点对象的输出格式return x y 7 6 1什么是对象的序列化 例7 20 将由10个点对象组成的链表写入c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 气象观测业务测试卷附答案
- 银行征信试题及答案
- 建筑行业政策与市场动向
- 玩偶行业玩偶设计方案
- 老雕塑迁移施工方案
- 人教版三年级上册混合运算单元测试卷1(含答案)
- 混凝土台阶面施工方案
- 德式建筑配色方案设计
- 2025年中国发泡混凝土数据监测报告
- 竣工财务决算审计服务合同范本4篇
- 成人脑室外引流护理标准解读
- 数字经济时代的法律挑战
- 施工质量月课件
- 心血管疾病患者血糖波动管理的专家共识解读 8
- 中小学校园膳食监督家长委员会工作制度
- 四川佰思格新材料科技有限公司钠离子电池硬碳负极材料生产项目环评报告
- WST854-2025血液透析中心医院感染预防与控制标准解读
- 2025年四川省综合评标专家库评标专家考试(第二阶段·住建类实务)历年参考题库含答案详解(5套)
- 第十四章 开放经济的宏观经济
- 马工程外国史学史课件
- 装卸、运输及安装调试方案
评论
0/150
提交评论