jAVA程序设计基础第十章.ppt





《jAVA程序设计基础第十章.ppt》由会员分享,可在线阅读,更多相关《jAVA程序设计基础第十章.ppt(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第10章章 I/O系统系统 教学提示:教学提示:从本章开始,将介绍Java中较为高级的内容。本章介绍Java的I/O(输入/输出)系统,主要包括文件的基本操作,Java 中流的概念及其应用,以及随机访问文件。学习完本章内容后,读者对Java的I/O系统将有一个整体上的认识,并有能力实现一般的输入/输出应用。教学目标:教学目标:熟悉对文件及目录的基本操作,熟悉Java I/O系统中各个类的作用及它们之间的关系,掌握随机访问文件的方法。通过上机实践,掌握上述内容的综合应用。10.1 文件的基本操作 对于任何程序设计语言的对于任何程序设计语言的I/O系统来说,在对文件进行读写数据操系统来说,在对文
2、件进行读写数据操作作(不管以何种方式进行不管以何种方式进行)之前,如何找到或定位正确的文件之前,如何找到或定位正确的文件(或目或目录录),如何获取文件,如何获取文件(或目录或目录)的属性信息的属性信息(如是否只读、修改时间如是否只读、修改时间、文件大小等文件大小等),如何创建和删除文件,如何创建和删除文件(或目录或目录),是首先必须解决的,是首先必须解决的基础性问题。对文件基础性问题。对文件(及目录及目录)的这些基本操作,是整个的这些基本操作,是整个 I/O 系统的基系统的基石。本节就先介绍石。本节就先介绍Java 提供的用以协助处理文件提供的用以协助处理文件(及目录及目录)相关事相关事务的类
3、务的类File。获取文件名清单获取文件名清单 获取文件属性信息获取文件属性信息 建立和删除文件建立和删除文件10.1.1 获取文件名清单 类File的名字很容易让人产生误解,以为 File 对象代表的就是文件,事实上并不只是如此。File对象不仅可以与文件建立关联,而且可以与目录建立关联,还可以与一组文件或目录建立关联,甚至可以及一组文件及目录的混合体建立关联。如果 File对象与一组文件或目录甚至这两者的混合体相关联,可以使用该对象的list()方法获取它们的名称列表。list()方法返回一个 String 数组,每个数组元素为一个文件或目录的名称。返回10.1.2 获取文件属性信息 Fil
4、e对象拥有很多获取相关联文件的属性信息的方法,它们的详细介绍见表10.1。返回方 法说 明boolean canRead()判断关联文件或目录是否可读boolean canWrite()判断关联文件或目录是否可写boolean exists()判断关联文件或目录是否存在String getAbsolutePath()获取关联文件或目录的绝对路径String getCanonicalPath()获取关联文件或目录的规范路径String getName()获取关联文件或目录的名字String getParent()获取关联文件或目录的上一级目录名String getPath()获取关联文件或目录的
5、路径名boolean isAbsolute()判断关联文件名或目录名是否绝对路径boolean isDirectory()判断所关联的是否目录boolean isFile()判断所关联的是否文件boolean isHidden()判断关联文件或目录是否隐藏long lastModified()获取最后修改时间,距1970年1月1日0:00:00的毫秒数long length()获取关联文件的大小,单位字节,若所关联的是目录,则返回0Boolean setLastModified(long time)修改关联文件或目录的最后修改时间boolean setReadonly()设置关联文件或目录为只
6、读返回10.1.3 建立和删除文件 File对象中关于建立和删除文件(或目录)的方法见表10.2。返回表表10.2 File10.2 File对象建立和删除文件的方法对象建立和删除文件的方法方 法说 明boolean createNewFile()当不存在所关联文件时,新建一个名为该关联文件名的空文件File createTempFile(String prefix,String suffix)在系统默认的临时目录中新建一个空文件,新文件的前缀为prefix,扩展名为suffixFile createTempFile(String prefix,String suffix,File direc
7、tory)在指定目录中新建一个空文件,新文件名的组成同上boolean delete()删除关联文件或目录,不能删除非空的目录void deleteonExit()在Java虚拟机终止时删除关联文件或目录boolean mkdir()新建一个名为所关联目录的目录boolean mkdirs()新建一个名为所关联目录的目录,关联路径中并不存在的目录也将创建boolean renameTo(File dest)将所关联文件更名至指定File对象关联的文件返回10.2 流 概 述 所谓流,是指任何可以产生数据的数据源,或任何可以接收数据的接收端,在数据源或接收端与使用流的程序之间的是一个数据序列,其
8、中的数据以字节或字符为单位顺序排列 。在往流中写入数据的一端观察,这个流即为输出流;相反,在从流中读出数据的一端观察,这个流即为输入流。流是有方向性的,不能往一个输入流中写数据,也不能从一个输出流中读数据。10.3 字 节 流InputStream/OutputStream继承体系中各子类的说明见表10.3和表10.4。FilterInputStream和FilterOutputStream各子类的说明见表10.5和表10.6。ByteArrayInputStream ByteArrayOutputStream FileInputStream FilterInputStream FileOut
9、putStream SequenceInputStream FilterOutputStream表表10.3 InputStream10.3 InputStream的子类的子类类 名功 能构造方法参数说明ByteArrayInputStream与字节数组关联的输入流一个字节数组,作为该输入流的数据源,内部输入缓冲区从其中获取数据FileInputStream与文件关联的输入流File对象、FileDescriptor对象或文件名,其代表的文件作为该输入流的数据源,该文件必须实际存在FilterInputStream过滤器输入流,拥有多个子类,用于指定如何读取数据,详见表10.5一个输入流,该过
10、滤器输入流从其中获取数据ObjectInputStream对象输入流,在对象串行化应用中用于读取对象信息一个输入流,对象输入流从该输入流中获取对象信息PipedInputStream管道输入流,在多线程环境中用于线程间的通信另一个线程的管道输出流,管道输入流从中获取数据SequenceInputStream队列输入流,用于汇集多个输入流一个实现了接口Enumeration(枚举)的类的对象,该对象的运行时类型应该为输入流;或者两个输入流,流队列输入流依次从中获取数据StringBufferInputStream与字符串关联的输入流,不建议使用一个字符串,作为该输入流的数据源,该字符串只有每个字
11、符的低8位有效返回表表10.4 OutputStream10.4 OutputStream的子类的子类类 名功 能构造方法参数说明ByteArrayOutputStream与字节数组关联的输出流无参数,输出缓冲区字节数组大小不限;或一个整数,作为输出缓冲区字节数组的大小FileOutputStream与文件关联的输出流File对象、FileDescriptOr对象或文件名,其代表的文件作为该输出流的输出端,该文件是否必须可用,视操作系统而定FilterOutputStream过滤器输出流,拥有多个子类,用于指定如何输出数据,详见表10.6一个输出流,该过滤器输出流向其中写入数据ObjectOu
12、tputStream对象输出流,在对象串行化应用中用于输出对象信息一个输出流,对象输出流向该输出流中写入对象信息PipedOutputStream管道输出流,在多线程环境中用于线程间的通信另一个线程的管道输入流,管道输出流向其中写入数据返回表表10.5 FilterInputStream10.5 FilterInputStream的子类的子类类 名功 能构造方法参数说明BufferedInputStream拥有一个内部输入缓冲区的过滤器输入流一个输入流,该过滤器输入流从其中获取数据;或一个输入流和一个整数,该整数用于指定内部输入缓冲区的大小DataInputStream按基本数据类型读取数据的
13、过滤器输入流一个输入流,该过滤器输入流从其中获取数据LineNumberInputStream按行读取数据的过滤器输入流,不建议使用一个输入流,该过滤器输入流从其中获取数据PushbackInputStream可以将一个字节数据回送给数据源的过滤器输入流,为编译器提供的类,编程中极少用到一个输入流,该过滤器输入流从其中获取数据;或一个输入流和一个整数,该整数用于指定回送缓冲区的大小返回表表10.6 FilterOutputStream10.6 FilterOutputStream的子类的子类类 名功 能构造方法参数说明BufferedOutputStream拥有一个内部输出缓冲区的过滤器输出流
14、一个输出流,该过滤器输出流从中获取数据;或一个输出流和一个整数,该整数用于指定内部输出缓冲区的大小DataOutputStream按基本数据类型输出数据的过滤器输出流一个输出流,该过滤器输出流向其中写入数据PrintStream产生格式化输出结果的过滤器输出流,用于数据的显示一个输出流,该过滤器输出流向其中写入数据;或一个输出流和一个布尔值,该布尔值指定是否自动刷新缓冲区返回10.3.1 ByteArrayInputStream ByteArrayInputStream对象中有一个字节数组对象中有一个字节数组(byte)类型的属性,类型的属性,作为内部缓冲区。类作为内部缓冲区。类ByteArr
15、ayInputStream有两个构造方法,一个构造方有两个构造方法,一个构造方法以一个字节数组作为参数,其数据被完全复制给内部缓冲区;另一个构法以一个字节数组作为参数,其数据被完全复制给内部缓冲区;另一个构造方法的参数包括一个字节数组造方法的参数包括一个字节数组、一个整型偏移量和一个整型长度,与一个整型偏移量和一个整型长度,与前一个构造方法不同的是,此构造方法生成的内部缓冲区将以指定偏移量前一个构造方法不同的是,此构造方法生成的内部缓冲区将以指定偏移量位置作为起始位置位置作为起始位置,并且能读取的最大数据长度为指定长度值。这个字并且能读取的最大数据长度为指定长度值。这个字节数组就是该输入流的数
16、据源节数组就是该输入流的数据源。内部缓冲区保持一个标记,指向当前字。内部缓冲区保持一个标记,指向当前字节节。read()方法读取该标记所指字节的数据方法读取该标记所指字节的数据,并将该标记向后移一个字节,并将该标记向后移一个字节,使下一个字节成为当前字节;通过,使下一个字节成为当前字节;通过mark()方法可以在当前字节处做一个方法可以在当前字节处做一个记号记号,通过,通过 reset()方法可以将该记号所指的字节恢复为当前字节,缓冲方法可以将该记号所指的字节恢复为当前字节,缓冲区标记重新指向该字节区标记重新指向该字节;通过;通过 skip()方法可以使缓冲区标记向后跳跃。方法可以使缓冲区标记
17、向后跳跃。返回10.3.2 ByteArrayOutputStream 与与ByteArrayInputStream对应,对应,ByteArrayOutputStream对象中同样对象中同样有一个字节数组类型的属性有一个字节数组类型的属性,作为内部缓冲区,作为内部缓冲区,同时也是该输出流的接,同时也是该输出流的接收端。类收端。类ByteArrayOutputStream有两个构造方法,一个构造方法没有参有两个构造方法,一个构造方法没有参数数,生成的内部缓冲区的初始大小为,生成的内部缓冲区的初始大小为32个字节个字节,另一个构造方法有一个另一个构造方法有一个整型参数整型参数,生成的内部缓冲区的初
18、始大小即为该整型参数,生成的内部缓冲区的初始大小即为该整型参数,内部缓冲区,内部缓冲区大小将随着数据的写入自动更改大小将随着数据的写入自动更改。ByteArrayOutputStream 对象通过对象通过write()方法往内部缓冲区中写入数据方法往内部缓冲区中写入数据;通过;通过toByteArray()和和toString()可以获可以获取内部缓冲区的所有数据取内部缓冲区的所有数据;通过;通过 reset()方法可以清空内部缓冲区数据,方法可以清空内部缓冲区数据,使数据的写入重新开始;通过使数据的写入重新开始;通过 writeTo()方法可以将内部缓冲区的所有数方法可以将内部缓冲区的所有数
19、据写入另一个输出流中。据写入另一个输出流中。返回10.3.3 FileInputStream FileInputStream对象的数据源为文件,其构造方法有对象的数据源为文件,其构造方法有3个,一个以文个,一个以文件名为参数,一个以件名为参数,一个以File对象为参数,它们的作用是显然的,只有一点值对象为参数,它们的作用是显然的,只有一点值得注意,若关联的是目录或指定文件不存在得注意,若关联的是目录或指定文件不存在,则会产生异常,则会产生异常。比较特别。比较特别的是以的是以FileDescriptor对象为参数的构造方法。对象为参数的构造方法。FileDescriptor 也是也是 java.
20、io包中的类,用于关联已打开的文件,或已打开的网络链接,或其他包中的类,用于关联已打开的文件,或已打开的网络链接,或其他 I/O连连接,在机器底层发挥作用,可以强制系统缓冲区与底层设备接,在机器底层发挥作用,可以强制系统缓冲区与底层设备(文件、网络文件、网络连接和其他连接和其他I/O连接都是底层设备连接都是底层设备)保持同步,从而为输入流或输出流提供保持同步,从而为输入流或输出流提供一个与底层设备同步的系统缓冲区。这个类并不常用。一个与底层设备同步的系统缓冲区。这个类并不常用。返回10.3.4 FileOutputStream FileOutputStream对象同对象同FileInputSt
21、ream一样与文件关联一样与文件关联,该文件就是,该文件就是其接收端。写入其接收端。写入FileOutputStream对象中的数据将最终写入其关联文件对象中的数据将最终写入其关联文件。类。类FileOutputStream的构造方法有的构造方法有4个,其中个,其中 3个分别以关联文件名个分别以关联文件名、File 对象对象和和FileDescriptor对象为参数,与对象为参数,与FileInputStream 相应的相应的3 个构造方法中的参个构造方法中的参数作用相同,另一个构造方法以关联文件名和一个布尔值为参数数作用相同,另一个构造方法以关联文件名和一个布尔值为参数,该布尔值,该布尔值若
22、为若为true,则往,则往 FileOutputStream 对象中写入的数据将从关联文件的末尾处对象中写入的数据将从关联文件的末尾处开始写入,否则将从关联文件的开头处开始写入开始写入,否则将从关联文件的开头处开始写入,这将覆盖原有数据,参数,这将覆盖原有数据,参数只有关联文件名的构造方法,相当于此布尔值为只有关联文件名的构造方法,相当于此布尔值为 false。关联文件是否有效,。关联文件是否有效,不存在时是否可能被创建,视不同操作系统平台不同可能不同。在某些操作不存在时是否可能被创建,视不同操作系统平台不同可能不同。在某些操作系统平台下,同时只允许一个系统平台下,同时只允许一个 FileOu
23、tputStream 对象关联一个以写方式打开对象关联一个以写方式打开的文件。的文件。FileOutputStream 对象的方法比较简单,主要通过对象的方法比较简单,主要通过 write()方法往系方法往系统缓冲区中写入数据,通过统缓冲区中写入数据,通过 flush()方法把系统缓冲区的数据刷新提交到关联方法把系统缓冲区的数据刷新提交到关联文件中。文件中。返回10.3.5 FilterInputStream 类类FilterInputStream的构造方法是受保护的的构造方法是受保护的(protected),无法直接,无法直接创建创建FilterInputStream对象,本章将直接介绍其子
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- jAVA 程序设计 基础 第十

限制150内