Java程序设计.ppt_第1页
Java程序设计.ppt_第2页
Java程序设计.ppt_第3页
Java程序设计.ppt_第4页
Java程序设计.ppt_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java程序设计,单元十一 输入输出流,教学目标,学习内容,能力训练,内容,本章小结,课后作业,单元实践,一、专业能力: 应知: 为什么需要过滤流; 创建过滤流的一般方法; 应会: 掌握创建过滤流的一般方法; 掌握字节过滤流DataInputStream和DataOutputStream的使用; 掌握字符过滤流BufferedReader和BufferedWriter,二、方法能力: 学会学习、学会工作;培养科学的思维方法、开拓创新的精神和严谨的工作作风;拓展自我天赋、可持续发展能力和创造性解决问题的能力。,三、社会能力: 学会合作,学会做人,与他人和谐相处;具有良好的团队精神、职业道德和社会

2、责任感。,教学目标,重点: 创建过滤流的一般方法; 使用流进行输入/输出操作的基本步骤; 难点: 用流进行输入/输出操作,重点难点,任务一:掌握流及标准输入输出,任务三:掌握常用文件和目录操作,任务二:掌握常用输入输出流使用,学习内容,11.1 掌握流及标准输入输出,11.1.1 流及其分类 流是输入/输出设备的一种抽象表示,这些设备是数据源头或是数据终点。 Java应用程序可以从数据源读取数据,向数据目的地写入数据。 流最简单的分类: 当向一个流写入数据的时候,这个流被称为输出流。 当从一个流读取数据的时候,这个流被称之为输入流。 流可以按流动方向,处理位置,功能等分类(如表11-1示) I

3、O流的类层次,图 11-1 流是对输入输出设备一种抽象表示,表11-1,说明:,(1)首先,程序开发者可以使程序向流中写入数据或者从流中读出数据,你可以把它流想象成一个流入或流出你的程序的有序的数据序列; (2)其次,流必须连接到数据源或者数据目的地两端的任何一端,你的应用程序可以通过流来向数据源读取数据,或还可以通过流向数据目的地写入数据,即流都有自己的起点和终点,并且是顺序的。流是一个通道,通向数据源或者数据目的地; (3)要知道文件和流的差异。文件是一些具有永久存储及特定顺序的字节组成的一个有序的、具有名称的集合。因此,对于文件,人们常会想到目录路径、磁盘存储、文件名、文件和目录名等方面

4、。相反,流提供一种向后备存储器写入字节和从后备存储器读取字节的方式,后备存储器可以为多种存储媒介之一; (4)数据源或数据目的地,凡是可以存储数据都可以作为前面两者之一。,在编写控制台应用程序时,程序要读取从键盘输入的数据。那么程序是怎样读取从键盘输入的数据呢?请看示例: 【例11-1】从键盘按单个字节读取数据 【例11-2】按字节数组从键盘输入中读取数据,11.1.2 标准输入流,11.1.3 标准输出和标准错误,1、 标准输出 在操作系统中定义的三个标准流中,另一个是标准输出流,它同样可以通过java的类System成员获得。它对应于命令行的输出,由封装在System类的静态out成员中且

5、为PrintStream类型。 PrintStream类的主要写数据的方法: print(dataType data) 打印各种数据类型的值,dataType可以是Java的基本数据类型,也可以是字符数组、对象、字符串。 println(dataType data) 打印各种数据类型的值,然后终止行。dataType可以是Java的基本数据类型,也可以是字符数组、对象、字符串。 printf(参数.) 使用指定格式字符串和参数将格式化的字符串写入此输出流的便捷方法。 write(int b) 将指定的字节写入此流。 write(byte buf) 将 len 字节从指定的初始偏移量为 off

6、的 byte 数组写入此流。 append(char ch) 将指定字符添加到此输出流。,【例11-3】使用PrintStream流输出各种数据类型,2、标准错误,标准错误输出流,在默认情况下它通常将错误信息映射到命令行输出,由System类的err成员封装,且也是PrintStream类型。 Java的System类提供一些简单的静态方法调用,允许程序开发者对标准输入、输出、和错误流进行重定向: setIn(InputStream in) - 重新分配“标准”输入流。 setOut(PrintStream out) - 重新分配“标准”输出流。 setErr(PrintStream err)

7、 - 重新分配“标准”错误输出流。,【例11-4】重定向方法的简单使用,11.2 任务二 掌握常用输入输出流使用,InputStream和OutputStream类是所有字节输入流和输出流的基类。它们都是抽象类,不能被实例化,然而,这两个类都声明了一些方法,这些方法为它们所表示的流定义了操作的基本集合。它的子类对于读取二进制的数据很有用途。 Reader流和Writer流是能够以字符流的方式读写字节流的对象,所以说字符流本质上就是一个读或写对象所面向的字节流。它们都是抽象类,不能被实例化,然而,这两个类都声明了一些方法,这些方法为它们所表示的流定义了读写字符的基本及相关操作集合。,11.2.3

8、 FileInputStream类和FileOutStream类的使用,FileInputStream类是文件输入流,是从文件系统中的某个文件中获得输入字节,主要针对读取的二进制类型的文件的内容情况下使用它。在使用它时,必须先创建一个FileInputStream类的对象并且连接到数据源上。 FileOutStream类是文件输出流,是用于将数据写入 File 或 FileDescriptor 的输出流,主要针对写入的二进制类型的文件的内容情况下使用它。 在对流的相关操作结束后,一定要调用此方法关闭流,否则应用程序或系统中有很多流打开的话,则会耗费计算机资源。,使用实例: 1、保存用户输入到文

9、件 【例】从键盘读入一行字符,写到文件output.txt中去 2、显示文件内容 【例】显示文本文件的内容 【例11-5】简单读取文件:读取Java应用程序的源代码并正确显示汉字。 3、文件的复制 【例】文件复制程序 【例11-6】编写一个复制文件的应用程序。,11.2.5 FileReader类和FileWriter类使用,FileReader和FileWriter是按字符读写的输入输出流。它的基类是InputStreamReader和OutputStreamReader。在前面知道,InputStreamReader和OutputStreamWriter的基类分别是Reader和Write

10、r,而Reader类和Writer类以及它们的子类并不是流本身,而是提供了以字符流的形式读、写底层流的方法。因此,Reader对象或者Writer对象通常使用底层的InputStream对象和OutputStream对象来创建,InputStream对象和OutputStream对象封装有于外部设备的连接,这种外部设备就是最终的数据源或者数据目的地。 【例11-7】FileReader类的方法的使用 【例11-8】FileWriter类的方法的使用 【例11-9】综合应用复制文本文件,11.2.6 使用BufferedReader类实现各种数据类型的输入,BufferedReader从字符输入

11、流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取,并且可把读出的内容转换成各种数据类型。这样,使用BufferedReader类可以实现各种数据类型的输入。 例如BufferedReader在读取文本文件时,会先将字符数据读入缓冲区,而之后若使用read()方法时,会先从缓冲区中进行读取,如果缓冲区数据不足,才会再从文件中读取。 使用BufferedWriter时,写出的数据并不会先输出至目的地,而是先储存至缓冲区中,如果缓冲区中的数据满了,才会一次对目的地进行写出,例如一个目标文件,使用缓冲区,同样可以减少对磁盘的I/O动作,可以提高程序的写数据的效率。 【例11-10】Buff

12、eredReader类和BufferedWriter类使用的应用程序 【例11-11】用BufferedReader类实现各种数据类型的输入,11.3 任务三 掌握常用目录和文件操作,获取文件信息和更改文件属性 创建File对象,File类提供了四种构造方法,分别是: public File(String pathName) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。 public File(File parent,String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。 public File(String

13、parent,String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。 public File(String uri)通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。 读者要注意:File对象实际上并代表一个文件,File对象本身并不是物理文件或路径,而是封装了路径名或引用,该引用是指向硬盘上可能存在也可能不存在的物理文件或目录。所有创建File对象并不意味着文件或目录就一定存在。并且File类的实例是不可变的;也就是说,一旦创建,File 对象表示的抽象路径名将永不改变。 【例11-12】获取文

14、件的信息,11.3.2 列目录文件清单,列目录文件清单的File类的File对象的方法: Stringlist() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 Stringlist(FilenameFilter filter) 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。 FilelistFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 FilelistFiles(FileFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录

15、。 FilelistFiles(FilenameFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。 【例】列出目录下的所有文件和子目录,11.3.3 获取根目录和创建子目录,获取根目录和创建子目录的File对象的方法: booleanmkdir() 创建此抽象路径名指定的目录 booleanmkdirs() 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。 static FilelistRoots() 列出可用的文件系统根。 上面表格中两个对象方法、一个类方法,mkdir的功能是创建一个windows操作系统下的一个文

16、件夹即目录,mkdirs的功能是创建多个文件夹,但是必须创建的文件夹是要创建的文件夹及其不存在的所祖先文件夹。,11.3.4 文件的创建、更名和删除,创建、更名和删除文件的File对象的方法: booleancreateNewFile() 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。 static FilecreateTempFile(String prefix, String suffix) 在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。 static FilecreateTempFile(String prefix, String suf

17、fix, File directory) 在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。 booleanrenameTo(File dest) 重新命名此抽象路径名表示的文件。 booleandelete() 删除此抽象路径名表示的文件或目录。 voiddeleteOnExit() 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。 【例】在默认临时目录下创建、更名、删除文件。,11.3.5 基本数据类型数据的读写,类DataInputStream是实现了DataInput接口,它允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。如int、fl

18、oat、long、double和boolean等等。此外,DataInputStream的readUTF()方法还能读取采用UTF-8字符编码的字符串。DataInputStream类的所有读方法采用了readXXX()模式。比如: readByte()从输入流中读取1个字节,把它转换为byte类型的数据。 readerLong()从输入流中读取8个字节,把它转换为long类型的数据。 readFloat()从输入流中读取4个字节,把它转换为float类型的数据 readUTF()从输入流中读取1到3个字节,把它转换为采用UTF-8字符编码的字符串。 【例】基本数据类型的读写,11.3.6 使

19、用增加了缓冲的流类,使用增加了缓冲的流类主要有:字节数组输入流/输出流(ByteArrayInputStream、ByteArrayOutputStream)和字符数组输入流/输出流(CharArrayReader、CharArrayWriter),这些类都包含一个受保护的成员变量-内部缓冲区数组,并且连接上数据源或数据目的地是一个字节或字符数组。 其中ByteArrayInputStream的成员变量 protected byte buf的作用-由该流的创建者提供的 byte 数组,字节缓冲区, 而ByteArrayOutputStream类的成员变量 protected byte buf的

20、作用-存储数据的字节缓冲区; CharArrayInputStream的成员变量protected char buf的作用-字符缓冲区,CharArrayOutputStream类也有一成员变量 protected char buf的作用-存储数据的字符缓冲区。 其中它的成员方法详细情况,请看它们的基类字节流及字符流。但它们还定义自己的成员方法。从下列示例程序中读者可以知道它们的用法。,【例11-19】使用增加了缓冲的流类的用法。,11.3.7 读取文件指定行,读取文件指定行要用到类LineNumberReader,它是跟踪行号的缓冲字符输入流,其基类是BufferedReader。它有两个构

21、造方法: public LineNumberReader(Reader in) 使用默认输入缓冲区的大小创建新的行编号 reader,默认输入缓冲区的大小为8096个字节。 pulbic LineNumberReader(Reader in,int size) 创建新的行编号 reader,将字符读入给定大小的缓冲区。 例如: FileInputReader in=new FileInputReader(“test.java”); LineNumberReader line=new LineNumberReader(in); 此类的详细方法方法可参考11.3.2节它的基类Reader和JDK帮

22、助文档,此外,它还定义了方法 setLineNumber(int) 和 getLineNumber(),它们可分别用于设置和获取当前行号。默认情况下,行编号从 0 开始。 【例】读取文件指定行。,课后作业,建立一个用户注册和登录的界面,注册界面输入用户名和密码,按照“用户名/密码”的格式以二进制的方式保存在user.dat文件中;登录界面输入用户名和密码,与user.dat文件中的数据进行比较,然后在界面上通过一个JLabel的文本显示验证的结果。 对前面的注册/登录练习进行改写,利用RandomAccessFile记录多条用户/密码记录。,实训:将学生信息存入文件。 实训内容改进学籍管理系统,学生信息存入文件中,实现永

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论