面向对象编程输入输出一.ppt_第1页
面向对象编程输入输出一.ppt_第2页
面向对象编程输入输出一.ppt_第3页
面向对象编程输入输出一.ppt_第4页
面向对象编程输入输出一.ppt_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

准备上课了 Java面向对象高级编程 讲师 李志成 IO 目录 4 1 文件的概念 对程序设计者来说 管好后台数据的存储和访问是必须的任务 文件是指存放在外部存储介质上的数据集合 外部存储介质有 硬盘 光盘 U盘 软盘 磁带等 数据以二进制形式存储 文件命名规则需遵循操作系统的约定 主文件名 扩展名 文件分类 程序文件和数据文件 文本文件和二进制文件 顺序存取文件和随机存取文件 文件数据的层次 Judy 字段 field 010010101 字节 Byte 位 bit 数据库 database 按特定方式组织在一起的相关文件集合 数据库技术产生于60年代末70年代初期 其主要目的是为了有效地管理和存取大量的数据资源 数据变量 数据类型 对象变量 文件 数据 数据库 文件1 文件2 文件3 文件与流 在计算机系统中 文件被解释为一组有特定名称的关联字符流 流是文件和程序之间通讯的通道 当打开一个文件时 该文件就和某个流关联起来了 当关闭文件时 将会取消流和文件的连接 程序 文件 流 读写文件步骤 读写文件三步骤 连接输入输出流到文件 读写数据 撤销流 缓冲机制 使用缓冲区在I O流中暂存数据 解决相对慢的I O设备对程序效率影响 程序 文件 abcd 8 io包中定义了多种执行I O操作的流 Object java io InputStream RandomAccessFile OutputStream Reader Writer File DataInputStream DataOutputStream BufferedReader BufferedWriter InputStream和OutputStream是字节流抽象类 Reader和Writer是字符流 与Unicode相容 抽象类 我们通常使用它们的子类 我们通常使用多个流类组合产生设计所需的流对象 BufferedInputStream BufferedOutputStream FileInputStream FileOutputStream FileReader FileWriter PrintWriter 9 文件类File 如何避免去读一个不存在的文件 或写一个只读文件 File类是java io类库提供 协助你处理文件和目录相关事务的类 File对象可以表示一个特定名称的文件 也可以表示某个目录中的一组文件 判断文件是否存在 是否可读可写exists canRead canWrite boolean 判断一个文件名是目录还是文件isDirectory isFile boolean 获取该目录下的文件列表list String 文件类File File对象还可以实现文件改名 删除 察看属性 建立新文件目录等功能 文件重命名renameTo dest File File 删除文件delete boolean 当文件不存在时创建此文件createNewFile boolean 创建文件目录mkdirs boolean 获取文件长度和修改时间length lastModified long 11 文件是否可读判断 privatebooleanisReadableFile StringfileName try 警戒区Filefile newFile fileName if file exists 判断文件是否存在thrownewFileNotFoundException Nosuchfile fileName if file canRead 判断文件是否可读thrownewIOException Filenotreadable filename returntrue catch FileNotFoundExceptione 文件找不到异常System err println IOERROR Filenotfound fileName returnfalse catch IOExceptione 文件不可读异常System err println IOERROR e getMessage returnfalse isReadableFile 12 文件是否可写判断 privatebooleanisWriteableFile StringfileName try 警戒区Filefile newFile filename if fileName length 0 判断文件名长度是否为空thrownewIOException Invalidfilename fileName if file exists isWriteableFile 建立c javaio mct test txt文件test txt改名test1 txtexistsisFileisDirectorycanWritecanReadlistFileslistrenameTomkdirmkdirscreateNewFilegetNamegetPathgetAbsolutePath 基本流类介绍 FileInputStream提供从二进制文件读字节的方法BufferedInputStream提供读大文件的输入数据缓冲DataInputStream提供读Java原子数据类型的方法OutputStream子类也同此FileReader提供把字符输入到文件的方法BufferedReader为字符输入流提供缓冲Writer子类也同此PrintWriter提供把二进制数据当作字符打印的方法 1 设计文件读写操作 开发高效的文件程序主要是选择正确的库方法 从问你自己需要什么方法开始 然后找到包含那些合适方法的流类 要找到正确的文件读写方法 有时需要查找Java类层次 借助在线文档可以很容易做到 16 写入一个文本文件 1 将已知的字符串写入一个文本文件 必须使用Writer子类 FileWriter可以 且包含用文件名作参数的构造函数 添加缓冲机制 提高效率 BufferedWriter可以和 FileWriter组合使用privatewriteTextFile Strings StringfileName try BufferedWriteroutStream newBufferedWriter newFileWriter fileName outStream write thisisatest outStream close 好习惯 降低文件损坏几率 catch IOExceptione System err println e getMessage e printStackTrace 17 写入一个文本文件 2 象打印数据一样将已知的各类数据写入一个文本文件 必须使用Writer子类 PrintWriter可以将各类数据转换为文本 且其构造函数允许用文件名 如果没有缓冲 则每次调用print 方法会导致将字符转换为字节 然后立即写入到文件 而这是极其低效的 PrintWriterout newPrintWriter newBufferedWriter newFileWriter E pool c txt outStream print 10 3 d可以是int double char boolean StringoutStream println abc d可以是int double char boolean StringoutStream close 好习惯 降低文件损坏几率注意 文件名的路径分隔符必须用 或 例 E pool c txt E pool c txt 注 PrintWriter write不会抛出I O异常 18 读取文本文件 从一个存在的文本文件 一次读取一行 必须使用Reader子类 FileReader可以 且包含用文件名作参数的构造函数 但它没有readLine 方法 BufferedReader包含readLine 方法 可用Reader对象作参数构造privatereadTextFile Strings StringfileName try BufferedReaderinStream newBufferedReader newFileReader fileName Stringline ln2 newString while line inStream readLine null ln2 line n inStream close catch FileNotFoundExceptione catch IOExceptione 19 写二进制文件 将各类数据写入二进制文件 必须是OutputStream子类 FileOutputStream有合适的构造函数 但其write方法不适用于String和double型数据 DataOutputStream为每类数据提供write方法 但没有用文件名作参数的构造函数 添加缓冲机制 避免每次调用write方法都直接写入磁盘的低效操作 BufferedOutputStream和以上流类组合try DataOutputStreamoutStream newDataOutputStream newBufferedOutputStream newFileOutputStream fileName 20 写二进制文件 outStream writeDouble 3 14159 outStream writeInt 30 outStream writeChar A outStream writeChars abc 按二进制方式写字符outStream writeUTF 我的汉字 按unicode文本格式写字符outStream close catch IOExceptione System err println e getMessage 21 读取二进制文件 读取二进制文件 还原各种数据类型 必须是InputStream子类 FileInputStream有合适的构造函数 但read方法不对字节流作处理 DataInputStream为每类数据提供read方法 但没有用文件名作参数的构造函数 添加缓冲机制 提高效率 BufferedInputStream和以上流类组合使用try DataInputStreaminStream newDataInputStream newBufferedInputStream newFileInputStream fileName 22 读取二进制文件 while inStream available 0 检测文件是否结束Stringname inStream readUTF 按unicode文本格式读取字符串intage inStream readInt doublepay inStream readDouble booleansign inStream readBoolean inStream close catch FileNotFoundExceptione catch IOExceptione 23 随机文件读写程序 随机存取的二进制文件写RandomAccessFilerf newRandomAccessFile rtest dat w for inti 0 i 10 i rf writeDouble i 1 414 rf writeChars abc rf writeUTF 我的汉字 rf close 随机存取的二进制文件改写rf newRandomAccessFile rtest dat rw rf seek 5 8 定位在第6个双精度数字处操作rf writeDouble 47 0001 rf close 24 随机文件读写程序 随机存取的二进制文件读取rf newRandomAccessFile rtest dat r for inti 0 i 10 i System out println rf readDouble rf close RandomAccessFile流类本身隐含缓冲区 25 将对象数据写入文件 对象可通过ObjectOutputStream序列化为字节流 FileOutputStream可以将序列化的字节流连接到指定文件 根据对象数据的大小 决定是否添加缓冲机制 BufferedOutputStream例 publicclassStudentimplementsSerializable Serializable是一个标记接口 不定义方法 仅指明对象是否序列化privateStringname privateintyear privatedoublegpa publicStudent StringnameIn intyr doublegpaIn 26 将对象数据写入文件 publicvoidwriteToFile Stringf throwsIOException if isWriteableFile f 判断文件是否可写 ObjectOutputStreamooStream newObjectOutputStream newBufferedOutputStream newFileOutputStream f ooStream writeObject this 将对象写入二进制文件ooStream close writeToFile 27 读取文件产生对象 也可将字节流通过ObjectInputStream反序列化为对象 FileInputStream可以实现从

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论