第8章--IO(输入输出)―教学设计

上传人:cn****1 文档编号:564720528 上传时间:2023-06-29 格式:DOC 页数:11 大小:366KB
返回 下载 相关 举报
第8章--IO(输入输出)―教学设计_第1页
第1页 / 共11页
第8章--IO(输入输出)―教学设计_第2页
第2页 / 共11页
第8章--IO(输入输出)―教学设计_第3页
第3页 / 共11页
第8章--IO(输入输出)―教学设计_第4页
第4页 / 共11页
第8章--IO(输入输出)―教学设计_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《第8章--IO(输入输出)―教学设计》由会员分享,可在线阅读,更多相关《第8章--IO(输入输出)―教学设计(11页珍藏版)》请在金锄头文库上搜索。

1、传智播客Java基础入门教学设计课程名称: Java基础教程 授课年级: 2014年级 授课学期: 2014学年第一学期教师姓名: 某某老师 2014年02月09日课题名称第8章 IO(输入输出)计划学时8 课时内容分析大多数应用程序都需要实现与设备之间的数据传输,在Java中,将这种通过不同输入/输出设备之间的数据传输抽象表述为“流”。Java中的“流”都位于java.io包中,称为IO(输入/输出)流,IO流有很多种,本课程将对这些流进行详细的讲解。教学目标及基本要求要求学生掌握字节流、字符流、转换流和File类,了解IO中几个比较重要流以外的其它IO流、RandomAccesseFile

2、和字符编码重点及措施教学重点:字节流、字符流、转换流和File类难点及措施教学难点:字节流、字符流、其它IO流、转换流和File类。本章中内容均有一定的难度,而且涉及的流种类较繁杂,因而理清各种流之间的关系及其各个流的作用,将有助于理解和记忆,同时引导学生结合代码学习也是十分重要的。教学方式教学采用教师课堂讲授为主,使用教学PPT讲解教学过程第一课时(字节流、字节流读写文件、文件的拷贝、字节流的缓冲区、装饰设计模式、字节缓冲流)l 字节流 字节流分类字节流分为字节输入流和字节输出流,其中字节输入流继承自InputStream,字节输出流继承自OutputStream。 InputStream的

3、常用方法方法声明功能描述in read()从输入流读取一个8位的字节,把它转换为0255之间的整数,并返回这一整数int read(byte b)从输入流读取若干字节,把它们保存到参数b指定的字节数组中,返回的整数表示读取字节数int read(byte b,int off,int len)从输入流读取若干字节,把它们保存到参数b指定的字节数组中,off指定字节数组开始保存数据的起始下标,len表示读取的字节数目void close()关闭此输入流并释放与该流关联的所有系统资源 OutputStream的常用方法方法名称方法描述void write(int b)向输出流写入一个字节void w

4、rite(byte b)把参数b指的字节数组的所有字节写到输出流void write(byte b,int off,int len)将指定byte数组中从偏移量off开始的len个字节写入输出流void close()关闭此输出流并释放与此流相关的所有系统资源void flush()刷新此输出流并强制写出所有缓冲的输出字节l 字节流读写文件由于计算机中的数据基本都保存在硬盘的文件中,因此操作文件中的数据是一种很常见的操作。在操作文件时,最常见的就是从文件中读取数据并将数据写入文件,即文件的读写。针对文件的读写,JDK专门提供了两个类,分别是和。是InputStream的子类,它是操作文件的字节

5、输入流,可以通过重载的read()方法读取文件中的数据。 是OutputStream的子类,它是操作文件的字节输出流,可以通过重载的write()方法将获取到的数据写入文件。如果希望在已存在的文件内容之后追加新内容,则可使用的构造函数(String, booleanappend)来创建文件输出流对象关闭流。l 文件的拷贝在应用程序中,IO流通常都是成对出现的,即输入流和输出流一起使用。例如文件的拷贝就需要通过输入流来读取文件中的数据,通过输出流将数据写入文件,示例代码如下所示: / 创建一个字节输入流,用于读取当前目录下source文件夹中的mp3文件InputStream in = new

6、(sourcetyle.mp3);/ 创建一个字节输出流,用于将读取的数据写入target目录下的文件中OutputStream out = new (targetstyle.mp3);int len; / 定义一个int类型的变量len,记住每次读取的一个字节/ 读取一个字节并判断是否读到文件末尾while (len = in.read() != -1) out.write(len); / 将读到的字节写入文件in.close();out.close();需要注意的是,以上例程中在定义文件路径时使用了“”,这是因为在Windows路径分隔符基础上添加了转义符()。除此之外,目录符号也可以用正

7、斜线(/)来表示,如:source/style.mp3。l 字节流的缓冲区实现文件的拷贝时,为了提高效率,可以定义一个字节数组作为缓冲区,然后使用read(byte b)方法一次性读取多个字节,并使用write(byte b)方法将字符数组中保存的数据一次性写入文件。l 装饰设计模式装饰设计模式就是通过包装一个类,动态地为它增加功能的一种设计模式。例如,下面的例子实现了RadarCar类对Car类的包装,让Benz车新增了倒车雷达功能。class Car private String carName; / 定义一个属性,代表车名public Car(String carName) this.c

8、arName = carName;public void show() / 实现Car的show()方法System.out.println(我是 + carName + ,具有基本功能);/ 定义一个类RadarCarclass RadarCar public Car myCar;public RadarCar(Car myCar) / 通过构造方法接收被包装的对象this.myCar = myCar;public void show() myCar.show();System.out.println(具有倒车雷达功能); / 实现功能的增强l 字节缓冲流在IO包中提供两个带缓冲的字节流,分

9、别是BufferedInputStream和BufferdOutputStream,这两个流都使用了装饰设计模式。它们的构造方法中分别接收InputStream和OutputStream类型的参数作为被包装对象,在读写数据时提供缓冲功能。应用程序、缓冲流和底层字节流之间的关系如下图所示。第二课时(字符流、字符流操作文件、LineNumberReader、转换流)l 字符流 字符流定义字符流用来操作字符,字符流也有两个抽象的顶级父类,分别是Reader和Writer。其中Reader是字符输入流,用于从某个源设备读取字符,Writer是字符输出流,用于向某个目标设备写入字符。 Reader和Wr

10、iter体系结构Reader体系结构如下图所示:Writer体系结构如下图所示:l 字符流操作文件 和如果想从文件中直接读取字符,可以使用字符输入流。的read()方法可以从关联的文件中读取一个或一组字符。需要注意的是,字符输入流的read()方法返回的是int类型的值,如果想获得字符就需要进行强制类型转换。如果要向文件中写入字符就需要使用类。是Writer的一个子类,它的用法同类似。 BufferedReader和BufferedWriter字符流同样提供了带缓冲区的包装流,分别是BufferedReader和BufferedWriter,其中BufferedReader用于对字符输入流进行

11、包装,BufferedWriter用于对字符输出流进行包装。l LineNumberReaderJDK中提供了一个可以跟踪行号的输入流LineNumberReader,它是BufferedReader的直接子类。在LineNumberReader类中,定义了跟踪行号的方法,其中setLineNumber()方法用于设置行号的初始值,getLineNumber()方法用于读取行号。值得注意的是,调用getLineNumber()方法读取行号时,行号是从1开始的。l 转换流为了将字节流转换为字符流,JDK提供了转换流,分别是InputStreamReader和OutputStreamWriter,

12、其中,OutputStreamWriter是Writer的子类,它可以将一个字节流输出流包装成字符输出流,方便直接写入字符,而InputStreamReader是Reader的子类,它可以将一个字节输入流包装成字符输入流,方便直接读取字符。通过转换流进行数据读写的过程如下图所示。需要注意的是,在使用转换流时,只能针对操作文本文件的字节流进行转换,如果字节流操作的是一张图片,此时转换为字符流就会造成数据丢失。第三课时(ObjectInputStream和ObjectOutputStream、DataInputStream和DatOutputStream、PrintStream、标准输入输出)l

13、ObjectInputStream和ObjectOutputStream如果希望永久保存对象,则可以将对象转为字节数据写入到硬盘上,这个过程称为对象序列化。反之,读取被序列化数据的过程称为反序列化。JDK提供了ObjectInputStream和ObjectInputStream两个类,这两个类分别用于实现对象的序列化和反序列化。需要注意的是,被序列化的对象必须得实现Serializable接口,否则会出现NotSerializableException异常。l DataInputStream和DataOutputStream有的时候只需要存储对象的成员数据,而这些成员数据的类型又都是基本数据

14、类型,这时,可以使用IO包中提供的另外两个数据操作流DataInputStream和DatOutputStream。DataInputStream和DatOutputStream是两个与平台无关的数据操作流,它们提供了读写各种基本类型数据的方法。为了保证最终数据的正确性,需要保证读取数据的顺序和写数据的顺序一致。 l PrintStream在Java的IO包中提供了一个PrintStream类,它提供了一系列用于打印数据的print()和println()方法,被称作打印流。PrintStream可以实现将基本数据类型的数据或引用数据类型的对象格式化成字符串后再输出。具体示例如下:PrintS

15、tream ps = new PrintStream(new (printStream.txt), true);ps.print(这是一个数字:);ps.println(19); / 打印数字l 标准输入输出流在System类中定义了三个常量,这些常量称为标准输入输出流,具体如下:l in:标准输入流,InputStream类型,用于读取键盘输入的数据l out:标准输出流,PrintStream类型,用于将数据输出到命令行窗口l err:标准错误流,PrintStream,用于将应用程序运行时的错误信息输出到控制台有的时候,程序会向命令行窗口输出大量的数据,由于输出数据滚动的太快,会导致无法阅读,这时可以将标准输

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号