
教案课程名称《Web系统开发》授课教师黄潇教学题目3学时第2章Java输入输出流技术教学时数1.Java流式输入输出的基本原理2.输入输出流的分类教学内容3.节点流类、处理流类4.对象序列化1.知识目标:掌握I/O流的分类和体系结构。理解Java中不同类型的输入输出流及其使用场景。熟悉随机访问文件类的概念和使用方法。熟悉对象序列化和反序列化的实现。2.能力目标:教学目标熟练运用Java输入输出流技术实现文件的读写操作。应用随机访问文件类读取文件任意位置数据。培养学生的实践能力和解决问题的能力。3.情感目标:强调信息安全与数据保护的重要性,培养学生的信息安全意识。通过课堂实践,让同学们能够做到举一反三,具有解决问题的能力和严谨的软件工匠精神。教学重点Java输入输出流的应用。教学难点对象序列化。教学课型团理论课口实验课授课手段多媒体教学授课方法讲授法+演示法+练习法专业术语InputStream,OutputStream,ObjectlnputStream,ObjectOutStream,Serializable1.梁永先、陈滢生、尹校军,JavaWeb程序设计(慕课版)第2版,人民邮电出版社,2021.3参考资料2.汪诚波,JavaWeb开发技术与实践,清华大学出版社,2018.93.千锋教育高教产品研发部,JavaWeb开发实战,清华大学出版社,2018.111.完成一个简单的文件复制程序,使用Java输入输出流技术实现文件的读写操作。课后作业2.显示指定目录下所有的.jpg文件。教学后记
教 案 课程名称 《Web 系统开发》 授课教师 黄 潇 教学题目 第 2 章 Java 输入输出流技术 教学时数 3 学时 教学内容 1. Java 流式输入输出的基本原理 2. 输入输出流的分类 3. 节点流类、处理流类 4. 对象序列化 教学目标 1. 知识目标: 掌握 I/O 流的分类和体系结构。 理解 Java 中不同类型的输入输出流及其使用场景。 熟悉随机访问文件类的概念和使用方法。 熟悉对象序列化和反序列化的实现。 2. 能力目标: 熟练运用 Java 输入输出流技术实现文件的读写操作。 应用随机访问文件类读取文件任意位置数据。 培养学生的实践能力和解决问题的能力。 3. 情感目标: 强调信息安全与数据保护的重要性,培养学生的信息安全意识。 通过课堂实践,让同学们能够做到举一反三,具有解决问题的能力和严谨的软件工 匠精神。 教学重点 Java 输入输出流的应用。 教学难点 对象序列化。 教学课型 理论课 实验课 授课手段 多媒体教学 授课方法 讲授法 + 演示法 + 练习法 专业术语 InputStream,OutputStream,ObjectInputStream,ObjectOutStream,Serializable 参考资料 1. 梁永先、陈滢生、尹校军,Java Web 程序设计(慕课版)第 2 版,人民邮电出版社, 2021.3 2. 汪诚波,Java Web 开发技术与实践, 清华大学出版社,2018.9 3. 千锋教育高教产品研发部,Java Web 开发实战,清华大学出版社,2018.11 课后作业 1. 完成一个简单的文件复制程序,使用 Java 输入输出流技术实现文件的读写操作。 2. 显示指定目录下所有的.jpg 文件。 教学后记 学生的出勤及纪律都比较好,教学基本能按事先设计的思路进行,课堂气氛也比较活跃。 通过在课堂上对学生的提问和学生的回答上发现大多数学生对 Java 的基础知识掌握得 还可以,但也有些学生掌握得不够扎实,有些遗忘,因此在理解和接收这次讲课内容上 有点跟不上

引入新课教学设计:通过提出问题,启发学生思考解决办法,从而激发学生对本讲所学知识的兴趣。Java是面向对象的程序设计语言,与面向过程的程序设计语言相比较,更接近于人教学组织的自然思维。引导学生查找资料,阅读书本,提前了解字符流在I/O流中的重要地位,过程 1带领学生进入I/O流入门的课堂,让学生对本门课程的学习充满期待。(3分钟)在实际开发过程中,许多程序都需要和外界进行信息交互,比如从文件中读取数据或者是向文件中写入数据、从键盘读取数据、将数据输出至打印机中等。Java语言提供了特有的输入/输出的功能,即以流的形式处理输入/输出数据操作。【思考】如何实现学生基本信息数据的导入导出?本讲主要内容教学设计:引导学生认真听讲,通过本堂课的学习学生能够收获:初步了解I/O流的分类和体系结构,字节流如何实现对文件信息的写入和读取:了解什么是字节字符输入流,什么是字节字符输出流。2.1Java流式输入输出原理在Java程序中,对于数据的输入输出操作以“流”(Stream)方式进行。J2SDK提供了各种各样的“流”类,用以获取不同种类的数据。程序中通过标准的方法输入或输出数据。什么是流?流是内存与存储设备之间传输数据的通道。传辅水的管道相当于流在此过程中,以家庭为参照物:教学组织水相当于数据生活用水>家庭中:流入过程3家庭房水下水道:流出(10 分钟)2.2输入输出流的分类J2SDK所提供的所有流类型位于java.io包,其中定义了多个流类型(类或抽象类)来实现输入/输出功能:可以从不同的角度对其进行分类:1.按方向:输入流:将中的内容读入到中。AstreamreadsSource程序输出流:将中的内容写入到中。Astreamwrites程序dest2.按单位:
教学组织 过程 1 (3 分钟) 引入新课 教学设计: 通过提出问题,启发学生思考解决办法,从而激发学生对本讲所学知识的兴趣。 Java 是面向对象的程序设计语言,与面向过程的程序设计语言相比较,更接近于人 的自然思维。引导学生查找资料,阅读书本,提前了解字符流在 I/O 流中的重要地位, 带领学生进入 I/O 流入门的课堂,让学生对本门课程的学习充满期待。 在实际开发过程中,许多程序都需要和外界进行信息交互,比如从文件中读取数据 或者是向文件中写入数据、从键盘读取数据、将数据输出至打印机中等。Java 语言提供 了特有的输入/输出的功能,即以流的形式处理输入/输出数据操作。 【思考】如何实现学生基本信息数据的导入导出? 教学组织 过程 3 (10 分钟) 本讲主要内容 教学设计: 引导学生认真听讲,通过本堂课的学习学生能够收获:初步了解 I/O 流的分类和体 系结构,字节流如何实现对文件信息的写入和读取;了解什么是字节字符输入流,什么 是字节字符输出流。 2.1 Java 流式输入输出原理 在 Java 程序中,对于数据的输入输出操作以“流”(Stream)方式进行。 J2SDK 提供了各种各样的“流”类,用以获取不同种类的数据。程序中通过标准的 方法输入或输出数据。 什么是流?流是内存与存储设备之间传输数据的通道。 2.2 输入输出流的分类 J2SDK 所提供的所有流类型位于 java.io 包,其中定义了多个流类型(类或抽象类) 来实现输入/输出功能;可以从不同的角度对其进行分类: 1. 按方向: 输入流:将中的内容读入到中。 输出流:将中的内容写入到中。 2. 按单位:

字节流:以字节为单位,可以读写所有数据。字符流:以字符为单位,只能读写文本数据。3.按功能:节点流:具有实际传输数据的读写功能,是可以从一个特定的数据源(节点)读写数据(如:文件,内存等)。节点流程序数据源处理流:在节点流(或处理流)的基础之上提供更为强大的读写功能。程序数据源处理流包java.io内的所有流类位于都分别继承自以下四种抽象流类型:字节流字符流输入流InputStreamReader输出流OutputStreamWriter4.字节流CnputStreamOutputStreamPushbackInputStreamFilelnputStreamFileOutputStreamDataOutputStreamDatalnputStreamPipedIntputStreamBufferedOutputStreamPipeOutputStreamBufferedInputStreamFilterInputStreamFilterOutputStreamPrintStreamLineNumberInputStreanByteArrayInputStreamByteArrayOutputStreamSequencedinputStreamObjectOutputStreamStringBufferlnputStreanObjectInputStream(1)InputStream的基本方法::intreadOthrowsIOException//读取一个字节并以整数的形式返回(0~255),如果返回-1已到输入流的末尾:intread(byteb)//返回值为实际读取的字节的数量,如果读取前已到输入流的末尾则返回-1. int read(byte b[ ], int off, int len)·voidclose();//关闭流释放内存资源//跳过n个字节不读,返回值为实际跳过的字节数量: long skip(long n)(2)OutputStream的基本方法:·voidwriteintb)throwsIOException//向输出流中写一个字节数据,该数据为参数b的低8位.void write(byte b[D). void write(byte b[ ], int off, int len)·void close()·voidflush()//刷新此输出流并强制写出所有缓冲的输出字节,由于某些流支持缓存功能,经常在closeO)前使用
字节流:以字节为单位,可以读写所有数据。 字符流:以字符为单位,只能读写文本数据。 3. 按功能: 节点流:具有实际传输数据的读写功能,是可以从一个特定的数据源(节点)读写 数据(如:文件,内存等)。 处理流:在节点流(或处理流)的基础之上提供更为强大的读写功能。 包 java.io 内的所有流类位于都分别继承自以下四种抽象流类型: 4. 字节流 (1)InputStream 的基本方法: int read() throws IOException //读取一个字节并以整数的形式返回(0~255),如 果返回-1 已到输入流的末尾 int read(byte b[]) //返回值为实际读取的字节的数量,如果读取前已到输入流的末 尾则返回-1 int read(byte b[ ], int off, int len) void close( ); //关闭流释放内存资源 long skip(long n) //跳过 n 个字节不读,返回值为实际跳过的字节数量 (2)OutputStream 的基本方法: void write(int b) throws IOException//向输出流中写一个字节数据,该数据为参数 b 的低 8 位 void write(byte b[ ]) void write(byte b[ ], int off, int len) void close() void flush( ) //刷新此输出流并强制写出所有缓冲的输出字节,由于某些流支持缓 存功能,经常在 close()前使用

5.字符流ReaderWriterBufferedReaderLineNumberReaderBufferedWriterCharArrayReaderCharArrayWriterInputStreamReaderFileReaderOutputStreamWriterFileWriterFilterReaderPushbackReaderFilterWriterPipedReaderPipedWriterStringReaderStringWriter教学设计:首先介绍文件类File,并以实例演示讲解File类的应用:然后再讲解以文件为数据宿进行文件传输的各种文件流类及应用。思政元素:结合信息安全和数据保护的案例,让学生认识到正确处理输入输出流对于保护信息安全的重要性。2.3节点流类【提问】什么是文件?文件一般存储在哪里?文件可认为是相关记录或放在一起的数据的集合。2.3.1File类java.io.File,文件或目录类。1.构造方法:·File(Stringpathname)//以pathname为路径创建File对象,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储:File(Stringparent, String child).File(File parent, String child)教学组织2.常量(static类型):过程4当前系统的目录分割符.separator、separatorChar(30分钟)·pathSeparator、pathSeparatorChar路径分隔符3.通过File对象可以访问文件的属性(请参考API文档)4.通过File对象创建空文件或目录(在该对象所指的文件或目录不存在的情况下)::booleancreateNewFileO)throwsIOException:boolean deleteo): boolean mkdir()·booleanmkdirsO/创建在路径中的一系列目录例:TestFile.javaimportjava.io.*.public class TestFilepublic static void main(Stringargs[l)String separator=File.separator,String filename="myfile.txt";String directory="mydirl"+separator+"mydir2";File f=new File(directory, filename),if(f.existsO)System.out.println("文件名:"+f.getAbsolutePath()System.out.println("文件大小:"+f.lengtho)
5. 字符流 教学组织 过程 4 (30 分钟) 教学设计: 首先介绍文件类 File,并以实例演示讲解 File 类的应用;然后再讲解以文件为数据 宿进行文件传输的各种文件流类及应用。 思政元素:结合信息安全和数据保护的案例,让学生认识到正确处理输入输出流对 于保护信息安全的重要性。 2.3 节点流类 【提问】什么是文件?文件一般存储在哪里? 文件可认为是相关记录或放在一起的数据的集合。 2.3.1 File 类 java.io.File,文件或目录类。 1. 构造方法: File(String pathname) //以 pathname 为路径创建 File 对象,如果 pathname 是相对路 径,则默认的当前路径在系统属性 user.dir 中存储 File(String parent, String child) File(File parent, String child) 2. 常量(static 类型): separator、separatorChar 当前系统的目录分割符 pathSeparator、pathSeparatorChar 路径分隔符 3. 通过 File 对象可以访问文件的属性(请参考 API 文档) 4. 通过 File 对象创建空文件或目录(在该对象所指的文件或目录不存在的情况下): boolean createNewFile() throws IOException boolean delete() boolean mkdir() boolean mkdirs() //创建在路径中的一系列目录 例:TestFile.java import java.io.*; public class TestFile { public static void main(String args[]) { String separator = File.separator; String filename = "myfile.txt"; String directory = "mydir1" + separator + "mydir2"; File f = new File(directory, filename); if(f.exists()) { System.out.println("文件名:" + f.getAbsolutePath()); System.out.println("文件大小:" + f.length() );

lelsef.getParentFileO.mkdirsO;try!f.createNewFileO,1catch(IOExceptione)e.printStackTraceO,【提问】Java程序如何访问文件?文件夹回文件,txtHelloWorldjava2.3.2FilelnputStream和FileOutputStream1.构造方法.FilelnputStream(String name)·FilelnputStream(File fileObi):FileOutputStream(String name):FileOutputStream(FilefileObi):FileOutputStream(FilefileObj,booleanappend)throwsFileNotFoundException常用方法:支持其父类所提供的数据读写方法。使用FilelnputStream读文本文件的基本步骤:importjava.io.lOException;引入相关的类importjava.io.FilelnputStream;FilelnputStreamfis=new购造文件输入流cilelntputStreFilelnputStream("c:lltest.txt");fis.available();读取文本文件的效据fis.read();口关闭文件流对象fis.close();【示例】:顺序读取文件名为参数所指示文件里的内容,并显示在控制台上面,直到文件结束为止。并统计所读取字节数。import java.io.*,publicclassTestFilelnputStreampublicstaticvoidmain(Stringargs)intb=0
} else { f.getParentFile().mkdirs(); try { f.createNewFile(); } catch(IOException e) { e.printStackTrace(); } } } } 【提问】Java 程序如何访问文件? 2.3.2 FileInputStream 和 FileOutputStream 1. 构造方法 FileInputStream(String name) FileInputStream(File fileObj) FileOutputStream(String name) FileOutputStream(File fileObj) FileOutputStream(File fileObj, boolean append) throws FileNotFoundException 常用方法:支持其父类所提供的数据读写方法。 使用 FileInputStream 读文本文件的基本步骤: 【示例】:顺序读取文件名为参数所指示文件里的内容,并显示在控制台上面,直 到文件结束为止。并统计所读取字节数。 import java.io.*; public class TestFileInputStream { public static void main(String[] args){ int b = 0;

FilelnputStream in-null,//System.out.println(newFile(".").getAbsolutePathO)//System.out.println(System.getProperty("user.dir"))://user.dir指定了当前的路径,即用户当前的工作目录Stringmydir=System.getProperty("user.dir"):tryin=newFilelnputStream(mydir+File.separator+"src"+File.separator+"chap02"+File.separator+"IODemol.java");lin=newFilelnputStream(mydir+File.separator+"WebContent"+File.separator+“images"+File.separator+"中国加油武汉加油.txt")l/in=newFilelnputStream(System.getProperty("user.dir")+"/WebContent/images/logo.png");catch(FileNotFoundExceptione)System.out.println("找不到指定文件!")e.printStackTraceO)1trylongnum=0;//num用于计数while(b = in.read() [=-1) (System.out.print((char)b)num ++;in.close();System.out.println(),System.out.println("共读取了"+num+"个字节。");catch(IOExceptionioe)System.oul.println("文件读取错误!"),ioe.printStackTraceO;1【提问】使用FileOutputStream写文本文件的步骤与读文件的步骤有何不同?引入相关的类importjava.io.lOException;importjava.io.FileOutputStream;银FileOutputStream fos=new构造文件输出流FleoutputStreFileOutputStream("c:lltest.txt");对象Stringstr="好好学习Java";bytewords =str.getBytes();fos.write(words,0,words.length);fos.close();关闭文件流对象【课堂训练】:实现两个文件间的拷贝(注意要捕获两个异常)
FileInputStream in=null; //System.out.println(new File(".").getAbsolutePath()); //System.out.println(System.getProperty("user.dir"));//user.dir指定了当前的路径 , 即用户当前的工作目录 String mydir = System.getProperty("user.dir"); try { in = new FileInputStream(mydir + File.separator +"src" + File.separator + "chap02"+ File.separator +"IODemo1.java"); //in = new FileInputStream(mydir + File.separator +"WebContent" + File.separator + "images"+ File.separator +"中国加油武汉加油.txt"); //in = new FileInputStream(System.getProperty("user.dir") + "/WebContent/images/logo.png"); } catch(FileNotFoundException e) { System.out.println("找不到指定文件!"); e.printStackTrace(); } try { long num = 0; //num用于计数 while((b = in.read()) != -1) { System.out.print((char)b); num ++; } in.close(); System.out.println(); System.out.println("共读取了" + num +"个字节。"); }catch(IOException ioe) { System.out.println("文件读取错误!"); ioe.printStackTrace(); } } } 【提问】使用 FileOutputStream 写文本文件的步骤与读文件的步骤有何不同? 【课堂训练】:实现两个文件间的拷贝(注意要捕获两个异常)

训练要点:理解输入流和输出流类的概念。使用FilelnputStream实现读取文本文件。使用FileOutputStream实现向文本文件中写数据需求说明:文件“我的青春谁做主.txt”位于D盘根目录下,要求将此文件的内容复制到C:myFilelmyPrime.txt中。实现思路:1)创建文件“D:1我的青春谁做主.txt”并自行输入内容。2)创建C:lmyFile的目录。3)创建输入流FilelnputStream对象,负责对D:1我的青春谁做主.txt文件的读取。4.)创建输出流FileOutputStream对象,负责将文件内容写入到C:lmyFilelmyPrime.txt中。5)创建中转站数组words,存放每次读取的内容。6)通过循环实现文件读写。7)关闭输入流、输出流。关键代码://1、创建输入流对象,负责读取D:I我的青春谁做主.txt文件。FilelnputStreamfis=newFilelnputStream("D:ll我的青春谁做主.txt");/2、创建输出流对象,负责将文件内容写入到C:lmyFilelmyPrime.txt中。FileOutputStreamfos=newFileOutputStream("C:lmyFilellmyPrime.txt",true);I3、创建中转站数组,存放每次读取的内容。bytewords =newchar[1024];II4、通过循环实现文件读写。while(fis.readO)/=-1)1/读取文件fis.read(words);fos.write(words, O, words.length);/写入文件1import java.io.*,public class TestFilecopypublic static void main(String args) intb=0;FilelnputStream in;FileOutputStreamout;Stringmydir=System.getProperty("user.dir")String filePath = mydir + File.separator +"WebContent" + File.separator +"images"+File.separator;try(in=newFilelnputStream(filePath+"中国加油武汉加油.txt")out=newFileOutputStream(filePath+"中国加油武汉加油1.txt")Ⅱ如指定文件不存在,则会先建立文件while ((b= in.read(O) /=-1)(out.write(b);?in.close
训练要点: 理解输入流和输出流类的概念。 使用 FileInputStream 实现读取文本文件。 使用 FileOutputStream 实现向文本文件中写数据 需求说明: 文件“我的青春谁做主.txt”位于 D 盘根目录下,要求将此文件的内容复制到 C:\myFile\my Prime.txt 中。 实现思路: 1)创建文件“D:\我的青春谁做主.txt”并自行输入内容。 2)创建 C:\myFile 的目录。 3)创建输入流 FileInputStream 对象,负责对 D:\我的青春谁做主.txt 文件的读取。 4.)创建输出流 FileOutputStream 对象,负责将文件内容写入到 C:\myFile\my Prime.txt 中。 5)创建中转站数组 words,存放每次读取的内容。 6)通过循环实现文件读写。 7)关闭输入流、输出流。 关键代码: // 1、创建输入流对象,负责读取 D:\我的青春谁做主.txt 文件。 FileInputStream fis = new FileInputStream("D:\\我的青春谁做主.txt"); //2、创建输出流对象,负责将文件内容写入到 C:\myFile\my Prime.txt 中。 FileOutputStream fos = new FileOutputStream("C:\\myFile\\myPrime.txt",true); // 3、创建中转站数组,存放每次读取的内容。 byte words [] = new char[1024]; // 4、通过循环实现文件读写。 while((fis.read())!=-1){ fis.read(words); //读取文件 fos.write(words, 0, words.length); //写入文件 } import java.io.*; public class TestFilecopy { public static void main(String[] args) { int b = 0; FileInputStream in; FileOutputStream out; String mydir = System.getProperty("user.dir") ; String filePath = mydir + File.separator +"WebContent" + File.separator + "images"+ File.separator ; try { in = new FileInputStream(filePath +"中国加油武汉加油.txt"); out = new FileOutputStream(filePath+"中国加油武汉加油1.txt"); // 如指定文件不存在,则会先建立文件 while ((b = in.read()) != -1) { out.write(b); } in.close();

out.close(),catch(FileNotFoundExceptione)System.out.println("找不到指定文件!")e.printStackTraceO,1catch(IOExceptionioe)System.out.println("文件复制错误!");ioe.printStackTraceO;System.out.println("文件复制成功!");12.3.3FileReader和FileWriter:FileReader(String name): FileReader(File fileObi)throwsFileNotFoundException:FileWriter(String name).FileWriter(File fileObi).FileWriter(FilefileObi,booleanappend)throwsIOExceptionl【练习】使用字符流读写文件。要求:格式模版保存在文本文件pet.template中,内容如下:您好!我的名字是(name),我是一只(type)我的主人是(master)其中(name)、(type)、(master)是需要替换的内容,现在要求按照模板格式保存宠物数据到文本文件,即把(name)、(type)、(master)替换为具体的宠物信息,该如何实现呢?分析:可以把该问题分解为:如何从文件中读取模版?使用Reader接口实现如何替换模版中的内容为当前宠物信息?使用String的replaceO方法实现如何将文本保存到文件?使用Writer接口实现使用字符流读写文本更合适。参考实现代码如下:importjava.io.Readerimportjava.io.FileReader,import java.io.IOException,Reader fir-null:StringBuffer sbf-null;try (fr=newFileReader("D:llmyDocll简介.txt");charch|=newchar[1024];//创建字符数组作为中转站sbf-newStringBufferO:intlength=fr.read(ch)://将字符读入数组while((length!=-1)(ll循环读取并追加字符1追加到字符串sbf.append(ch),length=fr.read();fr.closeo:
out.close(); } catch (FileNotFoundException e) { System.out.println("找不到指定文件!"); e.printStackTrace(); } catch (IOException ioe) { System.out.println("文件复制错误!"); ioe.printStackTrace(); } System.out.println("文件复制成功!"); } } 2.3.3 FileReader 和 FileWriter FileReader(String name) FileReader(File fileObj) throws FileNotFoundException FileWriter(String name) FileWriter(File fileObj) FileWriter(File fileObj, boolean append) throws IOException1 【练习】使用字符流读写文件。 要求:格式模版保存在文本文件 pet.template 中,内容如下: 您好! 我的名字是{name},我是一只{type} 我的主人是{master} 其中{name}、{type}、{master}是需要替换的内容,现在要求按照模板格式保存宠物 数据到文本文件,即把{name}、{type}、{master}替换为具体的宠物信息,该如何实现呢? 分析:可以把该问题分解为: 如何从文件中读取模版? 使用 Reader 接口实现 如何替换模版中的内容为当前宠物信息? 使用 String 的 replace()方法实现 如何将文本保存到文件? 使用 Writer 接口实现 使用字符流读写文本更合适。 参考实现代码如下: import java.io.Reader; import java.io.FileReader; import java.io.IOException; . . Reader fr=null; StringBuffer sbf=null; try { fr = new FileReader("D:\\myDoc\\简介.txt"); char ch[]=new char[1024]; //创建字符数组作为中转站 sbf=new StringBuffer(); int length=fr.read(ch); //将字符读入数组 while ((length!= -1)) {//循环读取并追加字符 sbf.append(ch); //追加到字符串 length=fr.read(); } }. . fr.close();

教学设计:通过先提问启发学生主动思考,从而激发学生的学习兴趣:在演示如何使用文件流类进行文件访问后,预留出时间给学生练习。思政元素:对于运行过程中出现的错误(互动讨论环节中的讨论主题),加以引导,让同学们能够做到举一反三,具有解决问题的能力和严谨的软件工匠精神。2.4处理流类【提问】如何提高字符流读取文本文件的效率?2.4.1缓冲流类通过增加缓冲区,减少访问硬盘的次数,提高I/O处理效率。BufferedReaderBufferedWriterBufferedInputStreamBufferedOutputStream1.构造方法:2.常用方法://用于读取一行字符串(以\r或In分隔).StringreadLineO1/用于写入一个行分隔符·viodnewLineO1/刷新该流的缓冲.voidflushO使用BufferedReader读文本文件的基本步骤:教学组织过程5importjava.io.FileReader;(30分钟)引入相关的类import java.io.BufferedReader;importjava.io.OException;一Readerfr=newFileReader("C:llmyTest.txt");淘造BufferedRea对和FileReader对多BufferedReaderbr=newBufferedReader(fr);■br.readLine();调用readLine0方法读取数据br.close();关闭文件流对象fr.close();【示例】import java.io.*,public classTestBufferStreampublic static void main(String[args)String sString mydir = System.getProperty("user.dir"),String filePath=mydir+File.separator+"WebContent"+File.separator+"images"+File.separator,tryFileReaderfis=newFileReader(filePath+中国加油武汉加油.txt"):
教学组织 过程 5 (30 分钟) 教学设计: 通过先提问启发学生主动思考,从而激发学生的学习兴趣;在演示如何使用文件流 类进行文件访问后,预留出时间给学生练习。 思政元素:对于运行过程中出现的错误(互动讨论环节中的讨论主题),加以引导, 让同学们能够做到举一反三,具有解决问题的能力和严谨的软件工匠精神。 2.4 处理流类 【提问】如何提高字符流读取文本文件的效率? 2.4.1 缓冲流类 通过增加缓冲区,减少访问硬盘的次数,提高 I/O 处理效率。 BufferedReader BufferedWriter BufferedInputStream BufferedOutputStream 1. 构造方法: 2. 常用方法: String readLine() //用于读取一行字符串(以\r 或\n 分隔) viod newLine() //用于写入一个行分隔符 void flush() //刷新该流的缓冲 使用 BufferedReader 读文本文件的基本步骤: 【示例】 import java.io.*; public class TestBufferStream { public static void main(String[] args) { String s; String mydir = System.getProperty("user.dir"); String filePath = mydir + File.separator + "WebContent" + File.separator + "images" + File.separator; try { FileReader fis= new FileReader(filePath + "中国加油武汉加油.txt");

BufferedReaderin=newBufferedReader(fis),while ((s=in.readLineO) !=null)System.out.println(s),in.close();fis.close(),catch (Exceptione)!e.printStackTraceO;11【提问】如何提高字符流写文本文件的效率?importjava.io.FileWriter;引入相关的类importjava.io.BufferedWriter;importjava.io.loException;1构造BufferedWriFileWriterfw=new对象和FileWriterFileWriter("C:lmyTest.txt");BufferedWriterbw=newBufferedWriter(fw);用write()方法写数bw.write("hello");抵护7流对象的清空和关闭bw.flush();flush()和close()fw.close();【示例】读取指定文件的内容,并将其内容输出到屏幕上,且在每行前面加上行号。importjava.io.*;public class TestLineNumberReaderpublic static voidmain(Stringargs)FileReaderfr,Stringmydir=System.getProperty("user.dir");String filePath = mydir +File.separator +"WebContent"+ File.separator +"images"+File.separator;tryfr=newFileReader(filePath+"中国加油武汉加油.txt");LineNumberReaderlnr=newLineNumberReader(f)String s = Inr.readLineO),while(s/=null)System.out.println(Inr.getLineNumberO+":"+s):s= Inr.readLine();Inr.closeO),fr.close(),I catch (Exception e) e.printStackTrace)
BufferedReader in = new BufferedReader(fis); while ((s = in.readLine()) != null) { System.out.println(s); } in.close(); fis.close(); } catch (Exception e) { e.printStackTrace(); } } } 【提问】如何提高字符流写文本文件的效率? 【示例】读取指定文件的内容,并将其内容输出到屏幕上,且在每行前面加上行号。 import java.io.*; public class TestLineNumberReader { public static void main(String[] args) { FileReader fr; String mydir = System.getProperty("user.dir") ; String filePath = mydir + File.separator +"WebContent" + File.separator + "images"+ File.separator ; try { fr = new FileReader(filePath+"中国加油武汉加油.txt"); LineNumberReader lnr = new LineNumberReader(fr); String s = lnr.readLine(); while(s != null) { System.out.println(lnr.getLineNumber() + ": " + s); s = lnr.readLine(); } lnr.close(); fr.close(); } catch (Exception e) { e.printStackTrace(); } } }