Java程序设计.ppt

上传人:asd****56 文档编号:87677464 上传时间:2023-04-16 格式:PPT 页数:27 大小:301.50KB
返回 下载 相关 举报
Java程序设计.ppt_第1页
第1页 / 共27页
Java程序设计.ppt_第2页
第2页 / 共27页
点击查看更多>>
资源描述

《Java程序设计.ppt》由会员分享,可在线阅读,更多相关《Java程序设计.ppt(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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

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

3、以按流动方向,处理位置,功能等分类(如表11-1示)IO流的类层次图11-1流是对输入输出设备一种抽象表示数据数据程序输入流输出流输入设备输出设备文件文件FillReaderFillReader、FileWriteFileWrite、FileInputStreamFileInputStream、FileOutputStreamFileOutputStream缓冲缓冲BufferedReadBufferedRead、BufferedWriterBufferedWriter、BufferedInputStreamBufferedInputStream、BufferedOutputStreamBuf

4、feredOutputStream打印打印PrintWriterPrintWriter、PrintStreamPrintStream内存内存CharArrayReaderCharArrayReader、CharArraryWriterCharArraryWriter、ByteArrayInputStreamByteArrayInputStream、ByteArrayOutputStreamByteArrayOutputStream、StringReaderStringReader、StringWriterStringWriter、StringBufferInputStreamStringBuf

5、ferInputStream字符流到字节字符流到字节流转换流转换InputStreamReaderInputStreamReader、OutputStreamWriterOutputStreamWriter管道管道PipeReaderPipeReader、PipeWriterPipeWriter、PipeInputStreamPipeInputStream、PipeOutputStreamPipeOutputStream连接连接SequenceInputStreamSequenceInputStream对象串行化对象串行化ObjectInputStreamObjectInputStream、O

6、bjectOutputStreamObjectOutputStream基本数据类型基本数据类型转换转换DataInputStreamDataInputStream、DataOutputStreamDataOutputStream计数计数LineNumberReaderLineNumberReader、LineNumberInputStreamLineNumberInputStream推回缓冲区推回缓冲区PushbackReaderPushbackReader、PushbackInputStreamPushbackInputStream过滤过滤FilterReaderFilterReader、F

7、ilterWriterFilterWriter、FilterInputStreamFilterInputStream、FilterOutputStreamFilterOutputStream表表11-111-1说明:(1)首先,程序开发者可以使程序向流中写入数据或者从流中读出数据,你可以把它流想象成一个流入或流出你的程序的有序的数据序列;(2)其次,流必须连接到数据源或者数据目的地两端的任何一端,你的应用程序可以通过流来向数据源读取数据,或还可以通过流向数据目的地写入数据,即流都有自己的起点和终点,并且是顺序的。流是一个通道,通向数据源或者数据目的地;(3)要知道文件和流的差异。文件是一些具有

8、永久存储及特定顺序的字节组成的一个有序的、具有名称的集合。因此,对于文件,人们常会想到目录路径、磁盘存储、文件名、文件和目录名等方面。相反,流提供一种向后备存储器写入字节和从后备存储器读取字节的方式,后备存储器可以为多种存储媒介之一;(4)数据源或数据目的地,凡是可以存储数据都可以作为前面两者之一。在编写控制台应用程序时,程序要读取从键盘输入的数据。那么程序是怎样读取从键盘输入的数据呢?请看示例:【例11-1】从键盘按单个字节读取数据【例11-2】按字节数组从键盘输入中读取数据11.1.2 标准输入流标准输入流11.1.3 11.1.3 标准输出和标准错误标准输出和标准错误1 1、标准输出标准

9、输出 在操作系统中定义的三个标准流中,另一个是标准输出流,它同样可以通过java的类System成员获得。它对应于命令行的输出,由封装在System类的静态out成员中且为PrintStream类型。PrintStreamPrintStream类的主要写数据的方法:类的主要写数据的方法:print(dataType data)打印各种数据类型的值,dataType可以是Java的基本数据类型,也可以是字符数组、对象、字符串。println(dataType data)打印各种数据类型的值,然后终止行。dataType可以是Java的基本数据类型,也可以是字符数组、对象、字符串。printf(参

10、数.)使用指定格式字符串和参数将格式化的字符串写入此输出流的便捷方法。write(int b)将指定的字节写入此流。write(byte buf)将 len 字节从指定的初始偏移量为 off 的 byte 数组写入此流。append(char ch)将指定字符添加到此输出流。【例11-3】使用PrintStream流输出各种数据类型2 2、标准错误、标准错误 标准错误输出流,在默认情况下它通常将错误信息映射到命令行输出,由System类的err成员封装,且也是PrintStream类型。Java的System类提供一些简单的静态方法调用,允许程序开发者对标准输入、输出、和错误流进行重定向:se

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

12、一个读或写对象所面向的字节流。它们都是抽象类,不能被实例化,然而,这两个类都声明了一些方法,这些方法为它们所表示的流定义了读写字符的基本及相关操作集合。11.11.2 2.3 FileInputStream.3 FileInputStream类类和和FileOutStreamFileOutStream类类的使用的使用FileInputStream类是文件输入流,是从文件系统中的某个文件中获得输入字节,主要针对读取的二进制类型的文件的内容情况下使用它。在使用它时,必须先创建一个FileInputStream类的对象并且连接到数据源上。FileOutStream类是文件输出流,是用于将数据写入 F

13、ile 或 FileDescriptor 的输出流,主要针对写入的二进制类型的文件的内容情况下使用它。在对流的相关操作结束后,一定要调用此方法关闭流,否则应用程序或系统中有很多流打开的话,则会耗费计算机资源。使用实例使用实例:1 1、保存用户输入到文件、保存用户输入到文件【例】从键盘读入一行字符,写到文件output.txt中去2 2、显示文件内容、显示文件内容【例】显示文本文件的内容【例11-5】简单读取文件:读取Java应用程序的源代码并正确显示汉字。3 3、文件的复制、文件的复制【例】文件复制程序【例11-6】编写一个复制文件的应用程序。11.2.5 FileReader11.2.5 F

14、ileReader类和类和FileWriterFileWriter类使用类使用 FileReader和FileWriter是按字符读写的输入输出流。它的基类是InputStreamReader和OutputStreamReader。在前面知道,InputStreamReader和OutputStreamWriter的基类分别是Reader和Writer,而Reader类和Writer类以及它们的子类并不是流本身,而是提供了以字符流的形式读、写底层流的方法。因此,Reader对象或者Writer对象通常使用底层的InputStream对象和OutputStream对象来创建,InputStrea

15、m对象和OutputStream对象封装有于外部设备的连接,这种外部设备就是最终的数据源或者数据目的地。【例11-7】FileReader类的方法的使用【例11-8】FileWriter类的方法的使用【例11-9】综合应用复制文本文件11.2.6 使用BufferedReader类实现各种数据类型的输入BufferedReader从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取,并且可把读出的内容转换成各种数据类型。这样,使用BufferedReader类可以实现各种数据类型的输入。例如BufferedReader在读取文本文件时,会先将字符数据读入缓冲区,而之后若使用r

16、ead()方法时,会先从缓冲区中进行读取,如果缓冲区数据不足,才会再从文件中读取。使用BufferedWriter时,写出的数据并不会先输出至目的地,而是先储存至缓冲区中,如果缓冲区中的数据满了,才会一次对目的地进行写出,例如一个目标文件,使用缓冲区,同样可以减少对磁盘的I/O动作,可以提高程序的写数据的效率。【例11-10】BufferedReader类和BufferedWriter类使用的应用程序【例11-11】用BufferedReader类实现各种数据类型的输入11.3任务三掌握常用目录和文件操作获取文件信息和更改文件属性创建File对象,File类提供了四种构造方法,分别是:upub

17、lic File(String pathName)通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。upublic File(File parent,String child)根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。upublic File(String parent,String child)根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。upublic File(String uri)通过将给定的 file:URI 转换为一个抽象路径名来创建一个新的 File 实例。读者要注意:File

18、对象实际上并代表一个文件,File对象本身并不是物理文件或路径,而是封装了路径名或引用,该引用是指向硬盘上可能存在也可能不存在的物理文件或目录。所有创建File对象并不意味着文件或目录就一定存在。并且File类的实例是不可变的;也就是说,一旦创建,File 对象表示的抽象路径名将永不改变。【例11-12】获取文件的信息11.3.2列目录文件清单列目录文件清单的File类的File对象的方法:Stringlist()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。Stringlist(FilenameFilter filter)返回一个字符串数组,这些字符串指定此抽象路径

19、名表示的目录中满足指定过滤器的文件和目录。FilelistFiles()返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。FilelistFiles(FileFilter filter)返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。FilelistFiles(FilenameFilter filter)返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。【例】列出目录下的所有文件和子目录11.3.3获取根目录和创建子目录获取根目录和创建子目录的File对象的方法:booleanmkdir()创建此抽象

20、路径名指定的目录booleanmkdirs()创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。static FilelistRoots()列出可用的文件系统根。上面表格中两个对象方法、一个类方法,mkdir的功能是创建一个windows操作系统下的一个文件夹即目录,mkdirs的功能是创建多个文件夹,但是必须创建的文件夹是要创建的文件夹及其不存在的所祖先文件夹。11.3.4文件的创建、更名和删除创建、更名和删除文件的File对象的方法:ubooleancreateNewFile()当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。ustatic File c

21、reateTempFile(String prefix,String suffix)在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。ustatic File createTempFile(String prefix,String suffix,File directory)在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。ubooleanrenameTo(File dest)重新命名此抽象路径名表示的文件。u booleandelete()删除此抽象路径名表示的文件或目录。u voiddeleteOnExit()在虚拟机终止时,请求删除此抽象路径名表示的文

22、件或目录。【例】在默认临时目录下创建、更名、删除文件。11.3.5 基本数据类型数据的读写类DataInputStream是实现了DataInput接口,它允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。如int、float、long、double和boolean等等。此外,DataInputStream的readUTF()方法还能读取采用UTF-8字符编码的字符串。DataInputStream类的所有读方法采用了readXXX()模式。比如:readByte()从输入流中读取1个字节,把它转换为byte类型的数据。readerLong()从输入流中读取8个字节,把它

23、转换为long类型的数据。readFloat()从输入流中读取4个字节,把它转换为float类型的数据readUTF()从输入流中读取1到3个字节,把它转换为采用UTF-8字符编码的字符串。【例】基本数据类型的读写11.3.6使用增加了缓冲的流类使用增加了缓冲的流类主要有:字节数组输入流/输出流(ByteArrayInputStream、ByteArrayOutputStream)和字符数组输入流/输出流(CharArrayReader、CharArrayWriter),这些类都包含一个受保护的成员变量-内部缓冲区数组,并且连接上数据源或数据目的地是一个字节或字符数组。其中ByteArrayI

24、nputStream的成员变量protected byte buf的作用-由该流的创建者提供的 byte 数组,字节缓冲区,而ByteArrayOutputStream类的成员变量protected byte buf的作用-存储数据的字节缓冲区;CharArrayInputStream的成员变量protected char buf的作用-字符缓冲区,CharArrayOutputStream类也有一成员变量protected char buf的作用-存储数据的字符缓冲区。其中它的成员方法详细情况,请看它们的基类字节流及字符流。但它们还定义自己的成员方法。从下列示例程序中读者可以知道它们的用法。

25、【例11-19】使用增加了缓冲的流类的用法。11.3.7 读取文件指定行读取文件指定行要用到类LineNumberReader,它是跟踪行号的缓冲字符输入流,其基类是BufferedReader。它有两个构造方法:public LineNumberReader(Reader in)使用默认输入缓冲区的大小创建新的行编号 reader,默认输入缓冲区的大小为8096个字节。pulbic LineNumberReader(Reader in,int size)创建新的行编号 reader,将字符读入给定大小的缓冲区。例如:FileInputReader in=new FileInputReader

26、(“test.java”);LineNumberReader line=new LineNumberReader(in);此类的详细方法方法可参考11.3.2节它的基类Reader和JDK帮助文档,此外,它还定义了方法 setLineNumber(int)和 getLineNumber(),它们可分别用于设置和获取当前行号。默认情况下,行编号从 0 开始。【例】读取文件指定行。建立一个用户注册和登录的界面,注册界面输入用户名和密码,按照“用户名/密码”的格式以二进制的方式保存在user.dat文件中;登录界面输入用户名和密码,与user.dat文件中的数据进行比较,然后在界面上通过一个JLab

27、el的文本显示验证的结果。对前面的注册/登录练习进行改写,利用RandomAccessFile记录多条用户/密码记录。实训:将学生信息存入文件。实训内容改进学籍管理系统,学生信息存入文件中,实现永久存留学生信息(还没有涉及数据库)。实训目的熟练进行输入输出流和文件操作。实训过程实训:操作系统的复制功能实训内容要求读者编写一个有关文件输入输出的应用程序:实现操作系统中的复制功能,即复制一个文件或文件夹到另一个地方。运用前面所用的编程技能,正确的编写此应用程序。实训目的熟练进行输入输出流和文件操作。实训过程分析问题:拷贝一个文件的算法比较简单请参考程序11-6,当然,可以对它进行优化,比如使用缓冲

28、流,提高读写数据的效率等。但是在复制文件夹时,则需要利用Flie类在目标文件夹中创建相应的目录,并且使用递归方法。知识要点本章重点介绍了Java有关的输入输出流和文件操作的基本概念及操作,并结合文件的输入和输出详细介绍了Java类库I/O包中的基本类使用。本章介绍了下列主要内容:1、流是对输入输出设备的抽象表示(1)流是有序的字节序列,并它的读写操作必须按顺序进行,流必须和数据源或数据目的地建立连接,使用的程序可以通过流读/写数据源/数据目的地的数据。流分类及在Java的I/O包的类层次结构。(2)介绍了字节流和字符流的抽象基类及其子类,并详细讲述了这两个类的基本操作集合。(3)介绍了标准输入流、标准输出流及标准错误流,及利用它们各自的setIn、setOut、setErr对象方法进行标准流的重定向。(4)利用基本流FileInputStream和FileOutputStream(字节流)、FileWriter和FileReader(字符流)跟物理文件建立连接,实现对文件的按字节或字符进行读写操作。使用BufferedReader和BufferedWriter类实现各种数据类型的读写操作。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁