湖南科技职业学院软件职业技术学院 教师课时授课计划 教师姓名: 授课班级: 授课课时:6 课程名称:JAVA程序设计 第 8 课 教学循环号:6-1 课题 在磁盘上存储数据  各教学环节课时分配 讲授  4 课时   有指导的实践  2 课时   独立实践  0 课时  教学内容 1、用File类打开文件 2、用RandomAccessFile类读和写文件 3、用Stream类实现I/O操作  重点 用Stream类实现I/O操作  难点 用RandomAccessFile类读和写文件  教具 多媒体  作业 独立实践  授课日期 (校历) 第 4 周星期 4 第 1-4节   第 4 周星期 5 第 5-6 节   第 周星期 第 节   第 周星期 第 节  课后小结 可用File 或 RandomAccessFile类把数据写到文件 用File 类访问文件和目录对象 用 RandomAccessFile类读入或写出到文件中随机位置 流是通过通信路径从源移动到目的地的一串字节 InputStream 和 OutputStream 是抽象超类,用于读、写到字节流  详细教学过程附后 详细教学过程: 一、教学目标陈述(5分钟) 用File 和 RandomAccessFile 类读和写文件 用stream 类执行I/O 操作 二、JAVA中文件和流的概念(25分钟) 1、流 用Java 来处理所有的 I/O 操作 是字节序列 2、文件输入和输出 Java 支持基于文件的输入和输出操作的流 用 File, RandomAccessFile, 及 FileDescriptor类来做 3、File 类 使用主机OS 的命名惯例 允许删除和重命名文件和目录 允许列表目录 4、例子 File fileObject; fileObject = new File(“JavaFile”); fileObject = new File(“\\”,”JavaFile”); File directoryObject = new File(“\\”); 5、Stream 和 File类比较 流用于创建输入和输出链 File 类用于特定的文件操作 三、实例分析(45分钟) 8.D.1 (45分钟) 1、问题的陈述 作为所需功能的规格说明,所有用户需注册站点以利用所提供的性质。创建一个注册的applet。此applet的功能规格说明如下: applet应接收客户名和口令 这些材料应记录在文件中。 2、确定任务 识别写出到文件的材料 识别写出到文件要用的类和变量名 识别 必须写出数据的文件 识别要处理的异常和关于异常的错误消息 识别接收用户注册材料的控件和它们的变量 写出登录客户材料到文件的代码 创建登录文件 保存、编译、及执行程序 验证功能 3、分析解决问题 识别写出到文件的材料 结果: 客户的名字和口令需存储在文件中 识别类和变量名 RandomAccessFile 类: 用来可读或写到文件中随机的单元 以只读或只写的方式访问文件 提供以下构造符 RandomAccessFile(String pathname, String mode) RandomAccessFile(File name, String mode) 提供方法如length (), writeBytes(String), 及 seek(int pos) 结果: 为存储客户材料到文件,必须使用 RandomAccessFile类,将用名为“logfile” 的变量来表示此文件 识别必须写出数据的文件 结果: 将记录客户材料的登录文件的名是 “Customer.txt”。为登录文件提供的许可是读和写 识别要处理的异常和关于异常的错误消息 结果: 当写出到文件时可能发生的一个异常是你对此文件没有写许可。因此, IOException 需要被处理,在出现异常时要显示的错误消息是“Cannot write to the customer file”后接此异常对象 识别接收用户注册材料的控件和它们的变量 JPasswordField 类: 类是JTextField 类的子类 提供 getPassword() 方法 信息 控件 变量 显示文本 大小  User name JTextField JLabel textCustName labelCustName none “Customer Login Name:” 10 Default  User Password JPassword Field JLabel textPassword labelPassword none “Password:” 10 Default   JButton loginButton “LOGIN” Default   写出登录客户材料到文件的代码 代码: public void actionPerformed(ActionEvent evt) { //………… String entry = textCustName.getText() + “:” + new String(textPassword.getPassword()); try { RandomAccessFile logFile = new RandomAccessFile("Customer.txt","rw"); logFile.seek(logFile.length()); logFile.writeBytes(entry); } //catch exceptions } 创建登录文件 动作: RandomAccessFile类的构造符假定:作为参数提供它的文件已经存在。所以,你必须创建名为“Customer.txt” 的空文本。在你第一次执行次程序时,使用 policytool 来设置文件的读和写许可。 4、执行验证 保存、编及执行文件 验证功能 动作: 打入客户登录名的值为“Carol” ,口令为 “password”。打开 “Customer.txt” 文件并检查这些材料是否已写到此文件中 四、指导性练习 8.P.1(45分钟) 1、问题陈述 4.P.2中创建的applet需要修改后进入应用。 应用应存储客户服务执行的性能材料—名字、等级、性能准则、及评估—到文件中。写出并入这些功能到应用的代码。 2、问题分析 3、验证 五、实例分析 8.D.2(45*2分钟) 1、问题的陈述 为接收商人材料创建注册应用。此应用的功能规格说明如下: 应用应接收商人材料,如:名字、地址、电话号码、及商人提供的服务. 这些材料应记录在文件中. 2、确定任务 识别写出到文件的材料 识别写出到文件要用的类和对象名 识别必须写入数据的文件 编写登录商人材料到文件的代码 创建登录文件 保存、编译、及支持程序 验证功能 3、分析解决问题 识别写出到文件的材料 结果: 商人材料,如:名字、地址、电话号码、及商人提供的服务需存储在文件中 识别写出到文件要用的类和对象名 流的类型: 节点流–读或写到特定位置的输入和输出流 Filter流–读写到另一个流的输入和输出流。常用来 增强流功能。 FileInputStream 类: 是节点流 子类java.io.InputStream 类 用来从文件中读入数据字节 包含方法如:int read (), int read (byte[] b), int read (byte[] b, int off, int len), int available (), 及 close () 方法 FileOutputStream 类: 是节点流 子类 java.io.OutputStream 类 用来写出数据字节到文件 包含方法如: void write (), void write (byte[] b), void write (byte[] b, int off, int len), flush (), and close () 方法 PrintStream 类: 是过滤器流 用来写出double, int, 及 String值到目的地 例子: PrintStream ps=new PrintStream (new FileOutputStream(“Bonus.dat”, true)); String data=textfield.getText(); ps.write(data); Readers 和 Writers: 用来实现节点和过滤器流 支持Unicode 字符流的读和写 InputStreamReader 和 OutputStreamWriter – 所有readers 和 writers的抽象基类 用来在字节和Unicode 字符流之间的转换数据 实现 Readers and Writers的示例代码: import java.lang.*; import java.io.*; public class ReadWriteFile { public static void main(String args[]) throws IOException { InputStreamReader inputReader = new InputStreamReader(System.in); BufferedReader bufferStream = new BufferedReader(inputReader); String readString; do { System.out.println("\nPlease enter something: "); System.out.flush(); readString = bufferStream.readLine(); System.out.println("Hello User>This is what you wrote"); System.out.println("> "+readString); } while (readString.length() != 0); } } 结果: InputStreamReader类的对象名为 “keyreader” BufferedReader 类的对象名为 “bfreader” FileOutputStream类的对象名为 “fswriter”。此对象将与必须写出商人材料的文件联系起来 识别必须写入数据的文件 结果 在磁盘上登录文件的名是 “Dealer.txt”。 登录文件要提供的许可是读和写 编写登录商人材料到文件的代码 创建登录文件 动作: 创建名为“Dealer.txt”的一个文本文件。使用策略工具在文件上设置读和写许可 4、执行验证 保存、编译、及执行程序 验证功能 动作: 打商人名的值为 “TalkWorld Inc”, 地址为 “142, Redmond Way, WA”, 电话 号码为 “423-442-3434”, 及提供的服务为 “Discounts”,打开 “Dealer.txt”文件并检查是否材料已经写到此文件 六、指导性练习 8.P.2(45分钟) 1、问题陈述 8.P.1 中创建applet以存储客户服务执行的材料需要修改以并入以下功能: 需加入标号为“Show Performance Details”的按钮到面板 点击此按钮,所有客户服务执行的性能材料需在文本域控件中被显示,该控件放在一个框架内 2、问题分析 3、验证 七、小结 (10分钟)