jAVA2程序设计基础第十章.ppt_第1页
jAVA2程序设计基础第十章.ppt_第2页
jAVA2程序设计基础第十章.ppt_第3页
jAVA2程序设计基础第十章.ppt_第4页
jAVA2程序设计基础第十章.ppt_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

第10章 I/O系统 教学提示:从本章开始 ,将介绍Java中较为高级的内容 。本章介 绍Java的I/O(输入/输出)系统,主要包括文件的基本操作 , Java 中流的 概念及其应用,以及随机访问文件。学习完本章内容后,读者对Java的 I/O系统将有一个整体上的认识,并有能力实现一般的输入/输出应用。 教学目标:熟悉对文件及目录的基本操作,熟悉Java I/O系统中各 个类的作用及它们之间的关系 ,掌握随机访问文件的方法 。通过上机 实践,掌握上述内容的综合应用。 10.1 文件的基本操作 对于任何程序设计语言的I/O系统来说,在对文件进行读写数据操 作(不管以何种方式进行)之前,如何找到或定位正确的文件 ( 或目录) ,如何获取文件(或目录)的属性信息(如是否只读、修改时间 、文件 大小等),如何创建和删除文件 (或目录 ) ,是首先必须解决的基础性 问题。对文件(及目录) 的这些基本操作,是整个 I/O 系统的基石。本 节就先介绍Java 提供的用以协助处理文件 ( 及目录 ) 相关事务的类 File。 10.1.1 获取文件名清单 10.1.2 获取文件属性信息 10.1.3 建立和删除文件 10.1.1 获取文件名清单 类File的名字很容易让人产生误解 ,以为 File 对象代表的就是文 件,事实上并不只是如此 。File对象不仅可以与文件建立关联 ,而且 可以与目录建立关联,还可以与一组文件或目录建立关联,甚至可以 及一组文件及目录的混合体建立关联 。如果 File对象与一组文件或目 录甚至这两者的混合体相关联,可以使用该对象的list()方法获取它们 的名称列表。list()方法返回一个 String 数组,每个数组元素为一个文 件或目录的名称。 返回 10.1.2 获取文件属性信息 File对象拥有很多获取相关联文件的属性信息的方法,它们的详 细介绍见表10.1。 返回 方 法说 明 boolean canRead()判断关联文件或目录是否可读 boolean canWrite()判断关联文件或目录是否可写 boolean exists()判断关联文件或目录是否存在 String getAbsolutePath()获取关联文件或目录的绝对路径 String getCanonicalPath()获取关联文件或目录的规范路径 String getName()获取关联文件或目录的名字 String getParent()获取关联文件或目录的上一级目录名 String getPath()获取关联文件或目录的路径名 boolean isAbsolute()判断关联文件名或目录名是否绝对路径 boolean isDirectory()判断所关联的是否目录 boolean isFile()判断所关联的是否文件 boolean isHidden()判断关联文件或目录是否隐藏 long lastModified()获取最后修改时间,距1970年1月1日0:00:00的毫秒数 long length()获取关联文件的大小,单位字节,若所关联的是目录,则返回0 Boolean setLastModified(long time)修改关联文件或目录的最后修改时间 boolean setReadonly()设置关联文件或目录为只读 返回 10.1.3 建立和删除文件 File对象中关于建立和删除文件(或目录)的方法见表10.2。 返回 表表10.2 File10.2 File对象建立和删除文件的方法对象建立和删除文件的方法 方 法说 明 boolean createNewFile()当不存在所关联文件时,新建一个名为该关联文 件名的空文件 File createTempFile(String prefix,String suffix) 在系统默认的临时目录中新建一个空文件,新文 件的前缀为prefix,扩展名为suffix File createTempFile(String prefix, String suffix,File directory) 在指定目录中新建一个空文件,新文件名的组成 同上 boolean delete()删除关联文件或目录,不能删除非空的目录 void deleteonExit()在Java虚拟机终止时删除关联文件或目录 boolean mkdir()新建一个名为所关联目录的目录 boolean mkdirs()新建一个名为所关联目录的目录,关联路径中并 不存在的目录也将创建 boolean renameTo(File dest)将所关联文件更名至指定File对象关联的文件 返回 10.2 流 概 述 所谓流,是指任何可以产生数据的数据源,或任何可以接收数据的接 收端,在数据源或接收端与使用流的程序之间的是一个数据序列,其中的 数据以字节或字符为单位顺序排列 。 在往流中写入数据的一端观察,这 个流即为输出流;相反,在从流中读出数据的一端观察,这个流即为输入 流。流是有方向性的,不能往一个输入流中写数据,也不能从一个输出流 中读数据。 10.3 字 节 流 InputStream/OutputStream继承体系中各子类的说明见表10.3和表10.4。 FilterInputStream和FilterOutputStream各子类的说明见表10.5和表10.6。 10.3.1 ByteArrayInputStream 10.3.2 ByteArrayOutputStream 10.3.3 FileInputStream 10.3.5 FilterInputStream 10.3.4 FileOutputStream 10.3.7 SequenceInputStream 10.3.6 FilterOutputStream 表表10.3 10.3 InputStreamInputStream的子类的子类 类 名功 能构造方法参数说明 ByteArrayInputStream与字节数组关联的输入流一个字节数组,作为该输入流的数据源 ,内部输入缓冲区从其中获取数据 FileInputStream与文件关联的输入流File对象、FileDescriptor对象或文件名, 其代表的文件作为该输入流的数据源, 该文件必须实际存在 FilterInputStream过滤器输入流,拥有多个子类,用 于指定如何读取数据,详见表10.5 一个输入流,该过滤器输入流从其中获 取数据 ObjectInputStream对象输入流,在对象串行化应用中 用于读取对象信息 一个输入流,对象输入流从该输入流中 获取对象信息 PipedInputStream管道输入流,在多线程环境中用于 线程间的通信 另一个线程的管道输出流, 管道输入流 从中获取数据 SequenceInputStream队列输入流,用于汇集多个输入流一个实现了接口Enumeration(枚举)的类的 对象,该对象的运行时类型应该为输入 流;或者两个输入流,流队列输入流依 次从中获取数据 StringBufferInputStrea m 与字符串关联的输入流,不建议使 用 一个字符串,作为该输入流的数据源, 该字符串只有每个字符的低8位有效 返回 表表10.4 10.4 OutputStreamOutputStream的子类的子类 类 名功 能构造方法参数说明 ByteArrayOutputStr eam 与字节数组关联的输出流无参数,输出缓冲区字节数组大 小不限;或一个整数,作为输出 缓冲区字节数组的大小 FileOutputStream与文件关联的输出流File对象、FileDescriptOr对象或文 件名,其代表的文件作为该输出 流的输出端,该文件是否必须可 用,视操作系统而定 FilterOutputStream过滤器输出流,拥有多个子 类,用于指定如何输出数据 ,详见表10.6 一个输出流,该过滤器输出流向 其中写入数据 ObjectOutputStream对象输出流,在对象串行化 应用中用于输出对象信息 一个输出流,对象输出流向该输 出流中写入对象信息 PipedOutputStream管道输出流,在多线程环境 中用于线程间的通信 另一个线程的管道输入流, 管道 输出流向其中写入数据 返回 表表10.5 10.5 FilterInputStreamFilterInputStream的子类的子类 类 名功 能构造方法参数说明 BufferedInpu tStream 拥有一个内部输 入缓冲区的过滤 器输入流 一个输入流,该过滤 器输入流从其中获取 数据;或一个输入流 和一个整数,该整数 用于指定内部输入缓 冲区的大小 DataInputStr eam 按基本数据类型 读取数据的过滤 器输入流 一个输入流,该过滤 器输入流从其中获取 数据 LineNumberI nputStream 按行读取数据的 过滤器输入流, 不建议使用 一个输入流,该过滤 器输入流从其中获取 数据 PushbackInp utStream 可以将一个字节 数据回送给数据 源的过滤器输入 流,为编译器提 供的类,编程中 极少用到 一个输入流,该过滤 器输入流从其中获取 数据;或一个输入流 和一个整数,该整数 用于指定回送缓冲区 的大小 返回 表表10.6 10.6 FilterOutputStreamFilterOutputStream的子类的子类 类 名功 能构造方法参数说明 BufferedOutputStr eam 拥有一个内部输出缓冲区 的过滤器输出流 一个输出流,该过滤器输出流 从中获取数据;或一个输出流 和一个整数,该整数用于指定 内部输出缓冲区的大小 DataOutputStream按基本数据类型输出数据 的过滤器输出流 一个输出流,该过滤器输出流 向其中写入数据 PrintStream产生格式化输出结果的过 滤器输出流,用于数据的 显示 一个输出流,该过滤器输出流 向其中写入数据;或一个输出 流和一个布尔值,该布尔值指 定是否自动刷新缓冲区 返回 10.3.1 ByteArrayInputStream ByteArrayInputStream对象中有一个字节数组 (byte) 类型的属性, 作为内部缓冲区。类ByteArrayInputStream有两个构造方法,一个构造方 法以一个字节数组作为参数,其数据被完全复制给内部缓冲区;另一个构 造方法的参数包括一个字节数组 、 一个整型偏移量和一个整型长度,与 前一个构造方法不同的是,此构造方法生成的内部缓冲区将以指定偏移量 位置作为起始位置 , 并且能读取的最大数据长度为指定长度值。这个字 节数组就是该输入流的数据源 。内部缓冲区保持一个标记,指向当前字 节 。read()方法读取该标记所指字节的数据 ,并将该标记向后移一个字节 ,使下一个字节成为当前字节;通过mark()方法可以在当前字节处做一个 记号 ,通过 reset()方法可以将该记号所指的字节恢复为当前字节,缓冲 区标记重新指向该字节 ;通过 skip() 方法可以使缓冲区标记向后跳跃。 返回 10.3.2 ByteArrayOutputStream 与ByteArrayInputStream对应,ByteArrayOutputStream对象中同样 有一个字节数组类型的属性 ,作为内部缓冲区 ,同时也是该输出流的接 收端。类ByteArrayOutputStream有两个构造方法,一个构造方法没有参 数 ,生成的内部缓冲区的初始大小为32个字节 , 另一个构造方法有一个 整型参数 ,生成的内部缓冲区的初始大小即为该整型参数 ,内部缓冲区 大小将随着数据的写入自动更改 。 ByteArrayOutputStream 对象通过 write()方法往内部缓冲区中写入数据 ;通过toByteArray() 和toString() 可 以获取内部缓冲区的所有数据 ;通过 reset( ) 方法可以清空内部缓冲区数 据,使数据的写入重新开始;通过 writeTo( ) 方法可以将内部缓冲区的所 有数据写入另一个输出流中。 返回 10.3.3 FileInputStream FileInputStream对象的数据源为文件,其构造方法有3个,一个以文 件名为参数,一个以File对象为参数,它们的作用是显然的,只有一点值 得注意,若关联的是目录或指定文件不存在 ,则会产生异常 。比较特别 的是以FileDescriptor对象为参数的构造方法。FileDescriptor 也是 java.io 包中的类,用于关联已打开的文件,或已打开的网络链接,或其他 I/O连 接,在机器底层发挥作用,可以强制系统缓冲区与底层设备 (文件、网络 连接和其他I/O连接都是底层设备)保持同步,从而为输入流或输出流提供 一个与底层设备同步的系统缓冲区。这个类并不常用。 返回 10.3.4 FileOutputStream FileOutputStream对象同FileInputStream一样与文件关联 ,该文件就是 其接收端。写入FileOutputStream对象中的数据将最终写入其关联文件 。类 FileOutputStream的构造方法有4个,其中 3个分别以关联文件名 、File 对象 和FileDescriptor对象为参数,与FileInputStream 相应的3 个构造方法中的参 数作用相同,另一个构造方法以关联文件名和一个布尔值为参数 ,该布尔值 若为true ,则往 FileOutputStream 对象中写入的数据将从关联文件的末尾处 开始写入,否则将从关联文件的开头处开始写入 ,这将覆盖原有数据,参数 只有关联文件名的构造方法,相当于此布尔值为 false 。关联文件是否有效, 不存在时是否可能被创建,视不同操作系统平台不同可能不同。在某些操作 系统平台下,同时只允许一个 FileOutputStream 对象关联一个以写方式打开 的文件。FileOutputStream 对象的方法比较简单,主要通过 write()方法往系 统缓冲区中写入数据,通过 flush() 方法把系统缓冲区的数据刷新提交到关联 文件中。 返回 10.3.5 FilterInputStream 类FilterInputStream的构造方法是受保护的(protected),无法直接创 建FilterInputStream对象,本章将直接介绍其子类。由于类 LineNumberInputStream已经不建议使用,类PashbackInputStream也极 少使用,本书将不作介绍。 返回 10.3.6 FilterOutputStream 类FilterOutputStream的构造方法也是受保护的(protected),同样无 法直接创建其对象,本章也将直接介绍其子类。 返回 10.3.7 SequenceInputStream 表表10.15 10.15 SequenceInputStreamSequenceInputStream对象的方法对象的方法 方 法说 明 int available()返回输入流中能获取的数据的字节数 Void close()关闭输入流,释放所有与该输入流相关的系统资源 boolean markSupported()判断输入流是否支持mark()方法和reset()方法的标记机制 int read()读取输入流当前字节的数据,将下一字节设为当前字节 int read(byte b)直接继承自InputStream类的方法,从输入流当前字节处 起读取长度等于b的长度个字节的数据,保存到b中,返 回读取的数据长度,将后第b.length个字节设为当前字节 int read(byte b,int off,int len)从输入流当前字节处起读取长度为len字节的数据,从位 置off处起存入数组b中,b中位置在off之前和在off+len之 后的数据将保持不变,返回读取的数据长度,将后第len 个字节设为当前字节 long skip(long n)使缓冲区标记向后跳跃n个字节,返回跳跃步数即n 返回 10.4 字 符 流 Reader/Writer继承体系中各类与InputStream/OutputStream继承体系中 相应类的作用基本相同,区别在于前者基于16位的Unicode编码字符进行读取 和写入操作,这两个继承体系之间的对应关系见表10.16。 10.4.2 CharArrayWriter 10.4.1 CharArrayReader 10.4.3 InputStreamReader 10.4.4 OutputStreamWriter 10.4.5 FileReader 10.4.7 StringReader 10.4.6 FileWriter 10.4.8 StringWriter 10.4.9 BufferedReader 10.4.10 LineNumberReader 10.4.12 PrintWriter 10.4.11 BufferedWriter 表表10.16 10.16 InputStream/OutputStreamInputStream/OutputStream继承体系与继承体系与Reader/WriterReader/Writer继承体系的对应关系继承体系的对应关系 InputStream/OutputStream继承体系Reader/Writer继承体系 InputStreamReader(通过类InputStreamReader转换) OutputStreamWriter(通过类OutputStreamWriter转换) ByteArrayInputStreamCharArrayReader ByteArrayOutputStreamCharArrayWriter InputStream/OutputStream继承体系Reader/Writer继承体系 FileInputStreamFileReader FileOutputStreamFileWriter FilterInputStreamFilterReader FilterOutputStreamFilterWriter BufferedInputStreamBufferedReader BufferedOutputStreamBufferedWriter DataInputStream无相应类,被沿用,readLine()方法不建议使用 DataOutputStream无相应类,被完全沿用 LineNumberInputStreamLineNumberReader PushbackInputStreamPushbackReader PrintStreamPrintWriter ObjectInputStream(无相应类) ObjectOutputStream(无相应类) PipedInputStreamPipedReader PipedOutputStreamPipedWriter SequenceInputStream(无相应类,被完全沿用) StringBufferInputStreamStringReader (无相应类)StringWriter 返回 10.4.1 CharArrayReader CharArrayReader 对象中有一个字符数组(char)类型的属性,作为 内部缓冲区。类CharArrayReader有两个构造方法,其中一个构造方法以 一个字符数组作为参数,另一个构造方法的参数包括一个字符数组、一个 整型偏移量和一个整型长度,意义与ByteArrayInputStream对象相同。 返回 10.4.2 CharArrayWriter 与ByteArrayOutputStream对应,CharArrayWriter对象中有一个字 符数组类型的属性作为内部缓冲区,同时也是该字符输出流的接收端。类 CharArrayWriter有两个构造方法,其中一个构造方法没有参数,生成的 内部缓冲区的初始大小为默认值,另一个构造方法有一个整型参数,生成 的内部缓冲区的初始大小即为该整型参数,内部缓冲区大小将随着数据的 写入自动更改。 返回 10.4.3 InputStreamReader 类InputStreamReader是所谓桥类之一,用于将字节输入流转换成字 符输入流,其自身是字符输入流,其数据源是字节输入流。 InputStreamReader对象往往被作为其他字符输入流的数据源使用。 返回 10.4.4 OutputStreamWriter 类OutputStreamWriter是所谓桥类中的另一个,用于将字符输出流转 换成字节输出流,其自身是字符输出流,其接收端是字节输出流。 OutputStreamWriter对象往往被作为其他字符输出流的接收端使用。该类 有4个构造方法,一个构造方法以一个字节输出流对象为参数,为要转换 成的字节输出流,采用默认的字符编码格式转换字符输出流中的字符数据 为字节数据;一个构造方法以一个字节输出流对象和一个字符串为参数, 这个字符串为字符编码名称,表示使用何种字符编码格式转换字符输出流 中的字符数据;一个构造方法以一个字节输出流对象和一个Charset对象 为参数(JDK 1.4中新加入的构造方法),后者指定采用何种字符集转换字 符输出流中的字符数据,请参阅Java(JDK 1.4)API文档;另一个构造方法 以一个字节输出流对象和一个CharsetEncoder对象为参数(JDK 1.4中新加 入的构造方法),后者指定采用何种字符集编码器转换字符输出流中的字 符数据,CharsetEncoder为字符集编码器类,代表将字符序列转换成字节 序列的引擎,请参阅Java(JDK 1.4)API文档。 返回 10.4.5 FileReader FileReader是InputStreamReader的子类,与FileInputStream对应, 用于读取关联文件中的数据。其构造方法有3个,一个以文件名为参数, 一个以File对象为参数,一个以FileDescriptor对象为参数(参见10.3.3小节) ,这些构造方法都假设默认的编码格式和默认的字节缓冲区是合法的。 FileReader的方法都直接继承自其父类InputStreamReader,甚至没有进 行任何重载, 返回 10.4.6 FileWriter FileWriter是OutputStreamWriter 的子类,与 FileOutputStream 对 应,用于往关联文件中写入数据。其构造方法有5个,一个以文件名为参 数,一个以File对象为参数,一个以FileDescriptor对象为参数(参见10.3.3 小节),另两个构造方法分别以关联文件名和一个布尔值,以及File对象和 一个布尔值(JDK 1.4中新加入的构造方法)为参数,该布尔值若为true,则 往FileWriter对象中写入的数据将从关联文件的末尾处开始写入,否则将 从关联文件的开头处开始写入,这将覆盖原有数据 ,参数只有关联文件 名或File对象的构造方法,相当于此布尔值为false。这些构造方法都假设 默认的编码格式和默认的字节缓冲区是合法的。FileWriter的方法都直接 继承自其父类 OutputStreamWriter,同样没有进行任何重载,在此不一 一列出, 返回 10.4.7 StringReader StringReader对象与一个字符串关联,其构造方法以一个字符串为参 数,作为数据源,其方法与 CharArrayReader 完全相同,ready() 方法同 样始终返回true,因为字符串输入流同样始终为read()方法作好准备。 返回 10.4.8 StringWriter StringWriter对象中有个StringBuffer对象作为内部缓冲区,同时也 是该字符输出流的接收端。类StringWriter有两个构造方法,一个构造方 法没有参数,生成的缓冲区长度为默认值,另一个构造方法有一个整型参 数,生成的内部缓冲区的初始大小即为该整型参数,内部缓冲区大小将随 着数据的写入自动更改。 返回 10.4.9 BufferedReader BufferedReader提供具有缓冲能力的字符输入流,其工作原理与 BufferedInputStream相同,同样拥有一个内部缓冲区,但以一个字符输 入流为数据源。类BufferedReader有两个构造方法 ,其中一个以一个字符 输入流对象为参数,作为数据源输入流 ,内部缓冲区大小为默认值;另 一个以一个字符输入流对象和一个整数为参数,该整数用于指定内部缓冲 区的大小。 返回 10.4.10 LineNumberReader LineNumberReader是BufferedReade

温馨提示

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

最新文档

评论

0/150

提交评论