版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章IO(输入输出)字节流和字符流File类掌握字节流和字符流读写文件的操作13了解字节流和字符流的概念2熟悉如何使用File类访问文件系统掌握了解熟悉学习目标字节流7.1☞点击查看本小节知识架构保存书店每日交易记录程序设计【任务7-1】字符流7.2☞点击查看本小节知识架构模拟记事本【任务7-2】File类7.3☞点击查看本小节知识架构模拟文件管理器【任务7-3】目录7.1字节流返回目录7.1.17.1.27.1.3字节流的概念字节流读写文件文件的拷贝7.1.4字节流的缓冲区7.1.5字节缓冲流知识架构7.2字节流返回目录7.2.17.2.27.2.3字符流定义及基本用法字符流操作文件转换流知识架构7.3File类返回目录7.3.17.3.27.3.3File类的常用方法遍历目录下的文件删除文件及目录知识架构大多数应用程序都需要实现与设备之间的数据传输,例如键盘可以输入数据,显示器可以显示程序的运行结果等。在Java中,将这种通过不同输入输出设备(键盘,内存,显示器,网络等)之间的数据传输抽象表述为“流”,程序允许通过流的方式与输入输出设备进行数据传输。Java中的“流”都位于java.io包中,称为IO(输入输出)流。IO流有很多种,按照操作数据的不同,可以分为字节流和字符流,按照数据传输方向的不同又可分为输入流和输出流,程序从输入流中读取数据,向输出流中写入数据。在IO包中,字节流的输入输出流分别用java.io.InputStream和java.io.OutputStream表示,字符流的输入输出流分别用java.io.Reader和java.io.Writer表示,具体分类如图所示。IO(输入输出)在计算机中,无论是文本、图片、音频还是视频,所有文件都是以二进制(字节)形式存在的,IO流中针对字节的输入输出提供了一系列的流,统称为字节流。字节流是程序中最常用的流,根据数据的传输方向可将其分为字节输入流和字节输出流。在JDK中,提供了两个抽象类InputStream和OutputStream,它们是字节流的顶级父类,所有的字节输入流都继承自InputStream,所有的字节输出流都继承自OutputStream。为了方便理解,可以把InputStream和OutputStream比作两根“水管”,如图所示。字节流的概念7.1字节流在JDK中,InputStream和OutputStream提供了一系列与读写数据相关的方法,接下来先来了解一下InputStream的常用方法,如下表所示。表中列举了InputStream的四个常用方法。前三个read()方法都是用来读数据的,其中,第一个read()方法是从输入流中逐个读入字节,而第二个和第三个read()方法则将若干字节以字节数组的形式一次性读入,从而提高读数据的效率。在进行IO流操作时,当前IO流会占用一定的内存,由于系统资源宝贵,因此,在IO操作结束后,应该调用close()方法关闭流,从而释放当前IO流所占的系统资源。7.1字节流与InputStream对应的是OutputStream。OutputStream是用于写数据的,因此OutputStream提供了一些与写数据有关的方法,如下表所示。表中,列举了OutputStream类的五个常用方法。前三个是重载的write()方法,都是用于向输出流写入字节,其中,第一个方法逐个写入字节,后两个方法是将若干个字节以字节数组的形式一次性写入,从而提高写数据的效率。flush()方法用来将当前输出流缓冲区(通常是字节数组)中的数据强制写入目标设备,此过程称为刷新。close()方法是用来关闭流并释放与当前IO流相关的系统资源。7.1字节流InputStream和OutputStream这两个类虽然提供了一系列和读写数据有关的方法,但是这两个类是抽象类,不能被实例化,因此,针对不同的功能,InputStream和OutputStream提供了不同的子类,这些子类形成了一个体系结构,如图所示。7.1字节流由于计算机中的数据基本都保存在硬盘的文件中,因此操作文件中的数据是一种很常见的操作。在操作文件时,最常见的就是从文件中读取数据并将数据写入文件,即文件的读写。针对文件的读写,JDK专门提供了两个类,分别是FileInputStream和FileOutputStream。FileInputStream是InputStream的子类,它是操作文件的字节输入流,专门用于读取文件中的数据。由于从文件读取数据是重复的操作,因此需要通过循环语句来实现数据的持续读取。
接下来通过一个案例来实现字节流对文件数据的读取,请查看教材文件7-1。案例代码字节流读写文件7.1字节流 FileOutputStream是OutputStream的子类,它是操作文件的字节输出流,专门用于把数据写入文件。接下来通过一个案例来演示如何将数据写入文件,请查看教材文件7-2。
接下来通过一个案例来演示如何将数据追加到文件末尾,请查看教材文件7-3。案例代码7.1字节流由于IO流在进行数据读写操作时会出现异常,为了代码的简洁,在上面的程序中使用了throws关键字将异常抛出。然而一旦遇到IO异常,IO流的close()方法将无法得到执行,流对象所占用的系统资源将得不到释放,因此,为了保证IO流的close()方法必须执行,通常将关闭流的操作写在finally代码块中,具体代码如下所示:7.1字节流
在应用程序中,IO流通常都是成对出现的,即输入流和输出流一起使用。例如文件的拷贝就需要通过输入流来读取文件中的数据,通过输出流将数据写入文件。接下来通过一个案例来演示如何进行文件内容的拷贝,请查看教材7.1.3小节。
案例代码文件的拷贝7.1字节流一个字节一个字节的读写,需要频繁的操作文件,效率非常低。这就好比从北京运送烤鸭到上海,如果有一万只烤鸭,每次运送一只,就必须运输一万次,这样的效率显然非常低。为了减少运输次数,可以先把一批烤鸭装在车厢中,这样就可以成批的运送烤鸭,这时的车厢就相当于一个临时缓冲区。当通过流的方式拷贝文件时,为了提高效率也可以定义一个字节数组作为缓冲区。在拷贝文件时,可以一次性读取多个字节的数据,并保存在字节数组中,然后将字节数组中的数据一次性写入文件。
接下来通过修改文件7-4来学习如何使用缓冲区拷贝文件,请查看教材文件7-5。案例代码字节流的缓冲区7.1字节流在IO包中提供两个带缓冲的字节流,分别是BufferedInputStream和BufferedOutputStream,它们的构造方法中分别接收InputStream和OutputStream类型的参数作为对象,在读写数据时提供缓冲功能。应用程序、缓冲流和底层字节流之间的关系如图所示。
接下来通过一个案例来学习BufferedInputStream和BufferedOutputStream这两个流的用法,请查看教材文件7-6。案例代码字节缓冲流7.1字节流任务案例案例代码接下来,通过一个保存书店每日交易记录程序设计来熟悉本阶段的知识点,请查看教材【任务7-1】。【任务7-1】保存书店每日交易记录程序设计前面我们讲过InputStream类和OutputStream类在读写文件时操作的都是字节,如果希望在程序中操作字符,使用这两个类就不太方便,为此JDK提供了字符流。同字节流一样,字符流也有两个抽象的顶级父类,分别是Reader和Writer。其中Reader是字符输入流,用于从某个源设备读取字符,Writer是字符输出流,用于向某个目标设备写入字符。Reader和Writer作为字符流的顶级父类,也有许多子类,接下来通过继承关系图来列出Reader和Writer的一些常用子类,如图所示。字符流定义及基本用法7.2字符流在程序开发中,经常需要对文本文件的内容进行读取,如果想从文件中直接读取字符便可以使用字符输入流FileReader,通过此流可以从关联的文件中读取一个或一组字符。接下来通过一个案例来学习如何使用FileReader读取文件中的字符。字符流操作文件
接下来通过一个案例来学习如何使用FileReader读取文件和FileWriter写入文件以及两个输入输出流实现文件的拷贝,请查看教材文件7.2.2小节。案例代码7.2字符流前面提到IO流可分为字节流和字符流,有时字节流和字符流之间也需要进行转换。在JDK中提供了两个类可以将字节流转换为字符流,它们分别是InputStreamReader和OutputStreamWriter。OutputStreamWriter是Writer的子类,它可以将一个字节输出流转换成字符输出流,方便直接写入字符,而InputStreamReader是Reader的子类,它可以将一个字节输入流转换成字符输入流,方便直接读取字符。通过转换流进行数据读写的过程如图所示。转换流7.2字符流
接下来通过一个案例来学习如何将字节流转为字符流,为了提高读写效率,可以通过BufferedReader和BufferedWriter来实现转换工作,请查看教材文件7-13。
案例代码7.2字符流任务案例案例代码接下来,通过一个模拟记事本来熟悉本阶段的知识点,请查看教材【任务7-2】。【任务7-2】模拟记事本File类用于封装一个路径,这个路径可以是从系统盘符开始的绝对路径,如:“D:\file\a.txt”,也可以是相对于当前目录而言的相对路径,如:“src\Hello.java”。File类内部封装的路径可以指向一个文件,也可以指向一个目录,在File类中提供了针对这些文件或目录的一些常规操作。接下来首先介绍一下File类常用的构造方法,如表所示。表中列出了File类的三个构造方法。通常来讲,如果程序只处理一个目录或文件,并且知道该目录或文件的路径,使用第一个构造方法较方便。如果程序处理的是一个公共目录中的若干子目录或文件,那么使用第二个或者第三个构造方法会更方便。File类的常用方法7.3File类File类中提供了一系列方法,用于操作其内部封装的路径指向的文件或者目录,例如判断文件/目录是否存在、创建、删除文件/目录等。接下来介绍一下File类中的常用方法,如表所示。7.3File类
接下来,首先在当前目录下创建一个文件“example.txt”并输入内容“itcast”,然后通过一个案例来演示File类的常用方法,请查看教材文件7-20。
案例代码7.3File类教材表7-4列举的方法中有一个list()方法,该方法用于遍历某个指定目录下的所有文件的名称,文件7-20中没有演示该方法的使用。遍历目录下的文件
接下来通过一个案例来演示list()方法的用法,请查看教材文件7-21。案例代码7.3File类为了让初学者更好地理解文件过滤的原理,接下来分步骤分析list(FilenameFilterfilter)方法的工作原理:调用list()方法传入FilenameFilter文件过滤器对象。取出当前File对象所代表目录下的所有子目录和文件。对于每一个子目录或文件,都会调用文件过滤器对象的accept(Filedir,Stringname)方法,并把代表当前目录的File对象以及这个子目录或文件的名字作为参数dir和name传递给方法。如果accept()方法返回true,就将当前遍历的这个子目录或文件添加到数组中,如果返回false,则不添加。
接下来通过一个案例来演示如何遍历指定目录下所有扩展名为“.txt”的文件和实现遍历指定目录下的文件,请查看教材文件7-22和7-23。案例代码7.3File类在操作文件时,经常需要删除一个目录下的某个文件或者删除整个目录,这时读者可以使用File类的delete()方法。接下来通过一个案例来演示使用delete()方法删除文件。首先在电脑的D盘中创建一个名称为test的文件夹,然后在文件夹中创建一个文本文件。删除文件及目录
接下来在Eclipse中创建一个使用delete()方
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度技术转让合同服务内容详细3篇
- 2024年度二手服装买卖合同及质量保证条款3篇
- 2024年度环保技术转让与许可合同2篇
- 2024年度环保新材料研发与产业化合作合同2篇
- 二零二四年度旅游服务合同标的为高端定制游3篇
- 银行盈利力剖析
- 艺术创新之路
- 二零二四年度物流设备租赁合同2篇
- 二零二四年度智能化房地产合同管理系统开发合同2篇
- 《昌盛的文化》课件
- 人体器官讲解课件
- 公务车辆定点加油服务投标方案(技术方案)
- 第一次月考测试卷(第一单元)(试题)2024-2025学年度第一学期三年级科学 冀人版
- 2024年普通高等学校招生全国统一考试·上海卷(数学)附试卷分析
- 中国联通公司招聘笔试题库2024
- 临床常用血液成分与输血适应症要点
- 2024年安全员C证考试题库及答案
- 2024秋国家开放大学《形势与政策》大作业参考答案
- 04S519小型排水构筑物(含隔油池)图集
- 2024年福船集团部分权属企业招聘工作人员48人高频考题难、易错点模拟试题(共500题)附带答案详解
- 运用PDCA循环提高全麻患者体温检测率
评论
0/150
提交评论