第8章Java输入输出流ppt课件.ppt
第8章Java输入输出流8 Java8 Java输入输出流输入输出流JavaJava程序设计基础程序设计基础主要内容:主要内容:p 文件系统和文件系统和File类及其常用方法类及其常用方法p 输出输入流和输出输入流和Inputstream,Outputstream类类p Reader和和Writer类类p InputStreamReader和和OutputStreamWriter类类p FileReader和和FileWriterp BufferedReader和和BufferedWriter类类教学目的和要求教学目的和要求:1.学会使用文件输入输出流读、写字节文件等。学会使用文件输入输出流读、写字节文件等。2.掌握如何提高读写效率和增强读写功能,灵活使掌握如何提高读写效率和增强读写功能,灵活使用用BufferedInputStream类和类和BufferedOutputStream类、类、DataInputStream类和类和DataOutputStream类类及类中的响应方法。及类中的响应方法。3.掌握如何存储和还原串行化对象。掌握如何存储和还原串行化对象。4.熟悉目录和文件操作熟悉目录和文件操作File类。类。5.掌握掌握RandomAccessFile类的使用类的使用定位读写。定位读写。6.熟悉字符流类熟悉字符流类Reader和和Writer的相关子类的使的相关子类的使用。用。 教学重点教学重点 :1.掌握常用的字节流类、字符流类的使用。掌握常用的字节流类、字符流类的使用。2.RandomAccessFile类实现定位读写。类实现定位读写。3.掌握目录和文件操作掌握目录和文件操作File类。类。4.掌握存储和还原串行化对象。掌握存储和还原串行化对象。5.综合所学知识编写能解决实际问题的输入输出程综合所学知识编写能解决实际问题的输入输出程序。序。 教学难点教学难点 :1.流的概念、输入和输出。流的概念、输入和输出。2.Java输入输出流的读写指针、流的结束等概念。输入输出流的读写指针、流的结束等概念。3.区别字节流、字符流。常用字节流类和字符流类区别字节流、字符流。常用字节流类和字符流类的使用。的使用。4.串行化的概念,如何串行化对象。串行化的概念,如何串行化对象。5.综合所学知识编写能解决实际问题的输入输出程综合所学知识编写能解决实际问题的输入输出程序。序。 Java的输入输出流数据流分为输入数据流和输出数据流数据流分为输入数据流和输出数据流, ,各自在各自在分为字节流和字符流分为字节流和字符流Java中的输入数据流中的输入数据流(字节流字节流)都是抽象类都是抽象类InputStream的子类的子类Java中的输入数据流中的输入数据流(字符流字符流)都是抽象类都是抽象类Reader的子类的子类输入数据流只能读输入数据流只能读,不能写不能写J a v a 中 的 输 出 数 据 流中 的 输 出 数 据 流 ( 字 节 流字 节 流 ) 都 是 抽 象 类都 是 抽 象 类OutputStream的子类的子类Java中的输出数据流中的输出数据流(字符流字符流)都是抽象类都是抽象类Writer的子类的子类输出数据流只能写输出数据流只能写,不能读不能读Java的输入输出/概述Java的输入输出是由定义在的输入输出是由定义在Java.io这个包中的这个包中的一系列一系列类和接口来实现的类和接口来实现的所以在需要输入输出的程序的前面都要所以在需要输入输出的程序的前面都要import java.io.*;在在java.io这个包里有这个包里有50个类和个类和10个接口个接口,我们会用到我们会用到 File RandomAccessFile InputStream及其子类及其子类(常用的常用的7个个) OutputStream及其子类及其子类(常用的常用的5个个)本章概要本章概要 :ObjectInputStreamReaderWriterFileRandomAccessFileOutputStreamFileInputStream FileReaderFileWriterFileOutputStream 字节字节8位位字符字符16位位Java的输入输出流输入数据流输入数据流InputStream(字节流字节流)的继承关系的继承关系InputStreamFileInputStreamPipedIntputStreamFilterInputStreamByteArrayInputStreamDataInputStreamBufferedInputStreamSequencedInputStreamObjectInputStreamPushbackInputStreamAudioInputStreamJava的输入输出流输出数据流输出数据流OutputStream(字节流字节流)的继承关系的继承关系OutputStreamFileOutputStreamPipedOutputStreamFilterOutputStreamByteArrayOutputStreamDataOutputStreamBufferedOutputStreamObjectOutputStreamPrintStreamJava的输入输出流输入数据流输入数据流reader(字符流字符流)的继承关系的继承关系ReaderInputStreamReaderPipedReaderFilterReaderCharArrayReaderPushbackReaderLineNumberReaderStringReaderBufferedReaderFileReader只画出了我们感兴趣的只画出了我们感兴趣的Java的输入输出流输出数据流输出数据流Writer(字符流字符流)的继承关系的继承关系WriterBufferedWriterFilterWriterCharArrayWriterOutputStreamWriterFileWriterPipedWriterPrintWriterStringWriter什么是文件什么是文件?文件文件n可以用来长期保存大量的数据可以用来长期保存大量的数据n在程序结束后仍能长期在程序结束后仍能长期(永久永久)存在存在n文件一般位于副存储设备上文件一般位于副存储设备上w硬盘硬盘w光盘光盘w磁带磁带保存在变量或数组中的数据是临时性数据保存在变量或数组中的数据是临时性数据n当程序结束时一般就会丢失当程序结束时一般就会丢失什么是数据流什么是数据流?数据流数据流是一系列的数据是一系列的数据n例如例如: System.in、System.out或或 System.err 所处理的对象是数据流所处理的对象是数据流wSystem.in - 标准输入标准输入 (从键盘从键盘)wSystem.out 标准输出标准输出 (到屏幕到屏幕)wSystem.err 标准错误输出标准错误输出 (到屏幕到屏幕)处理数据流的核心思想处理数据流的核心思想处理数据流的核心思想处理数据流的核心思想n能过循环处理每个数据单元,直到遇到结束能过循环处理每个数据单元,直到遇到结束符或出现例外符或出现例外(Exception)结束符结束符n在在Unix操作系统下操作系统下, 键入键入Control-D表示数表示数据流的结束据流的结束n在在Windows操作系统下操作系统下, 键入键入Control-Z表表示数据流的结束示数据流的结束8、Java的输入输出流的输入输出流什么是输入输出流什么是输入输出流? ?输入输出流说的都是数据流输入输出流说的都是数据流, ,而而数据流数据流是指一组有顺序是指一组有顺序的、有起点和终点的字节集合的、有起点和终点的字节集合文件文件程序程序网络端点网络端点数据流数据流起点起点终点终点 终端设备终端设备文件文件程序程序网络端点网络端点终端设备终端设备8文件输入流文件输入流FileInputStream类类 文件输入流,该类重写了其父类的大部分方法,用来打开文件并。文件输入流,该类重写了其父类的大部分方法,用来打开文件并。1创建文件输入流对象创建文件输入流对象 InputStream类的子类,以字节的方式读取数据。类的子类,以字节的方式读取数据。两个构造方法两个构造方法打开文件,创建文件输入流打开文件,创建文件输入流 FileInputStream(String name) throws FileNotFoundException 参数参数name路径和文件名路径和文件名 例如:例如:FileInputStream fis = new FileInputStream( c:java.txt ); FileInputStream(File file) throws FileNotFoundException 参数参数fileFile类对象,文件对象类对象,文件对象 例如:例如:File file = new File(./temp/b.txt); FileInputStream fis = new FileInputStream( file);8文件输入流文件输入流FileInputStream类类 2从输入流中读取字节数据从输入流中读取字节数据int read() throws IOException 从输入流中读取一个字节从输入流中读取一个字节(8位位)数据数据 读取位置自动移到下一个字节读取位置自动移到下一个字节 方法的返回值是方法的返回值是0-255之间的一个字节数据之间的一个字节数据 读到流的末尾返回读到流的末尾返回-1 int read(byte b) throws IOException 从输入流中读取从输入流中读取b.length个字节数据到数组个字节数据到数组b中中 读取位置自动移到相应的字节数读取位置自动移到相应的字节数 方法的返回值是实际读取的字节数方法的返回值是实际读取的字节数 读到流的末尾返回读到流的末尾返回-1 8文件输入流文件输入流FileInputStream类类 int read(byte b,int off,int len) throws IOException 从输入流中读取长度为从输入流中读取长度为len的数据的数据 存放到字节数组存放到字节数组b中从索引中从索引off开始的位置开始的位置 方法的返回值是本次实际读取的字节数方法的返回值是本次实际读取的字节数 读取位置移动相应的字节数读取位置移动相应的字节数 读到流的末尾返回读到流的末尾返回-1 int available() throws IOException 返回输入流中可以读取的字节数返回输入流中可以读取的字节数3关闭流关闭流void close() throws IOException; 方法功能是关闭流方法功能是关闭流实例实例6-1-1以字节为单位读入数据(补充)以字节为单位读入数据(补充)类类InputStream的成员方法的成员方法read( )读入单个读入单个无符号字节无符号字节(unsigned byte)的数据,并返回的数据,并返回一个整数类型一个整数类型(int)的值的值(与读入的无符号字节与读入的无符号字节数据相对应数据相对应)正常返回正常返回: 介于介于0和和255之间的一个数之间的一个数 如果遇到数据流结束,则返回如果遇到数据流结束,则返回-1public abstract int read( ) throws IOException 8文件输出流文件输出流FileOutputStream类类 1创建文件输出流对象创建文件输出流对象OutputStream类的子类,以字节的方式写数据到流中。类的子类,以字节的方式写数据到流中。三个构造方法创建文件输出流对象三个构造方法创建文件输出流对象写字节数据到文件中写字节数据到文件中 FileOutputStream(String name) throws FileNotFoundException FileOutputStream(File file) throws IOException FileOutputStream(String name,boolean append) throws FileNotFoundException 参数是包含路径和文件名的字符串或文件类对象参数是包含路径和文件名的字符串或文件类对象 如果文件不存在,则建立文件如果文件不存在,则建立文件 逻辑值逻辑值append为为true时,写入的字节数据追加到文件末尾时,写入的字节数据追加到文件末尾 逻辑值逻辑值append为为false时,写入字节数据覆盖文件原来的内时,写入字节数据覆盖文件原来的内容容 例如:例如: FileOutputStream out=new FileOutputStream(./abc.txt,true);8文件输出流文件输出流FileOutputStream类类 2输出流向文件写入字节数据输出流向文件写入字节数据void write(int b) throws IOException 将指定的一个字节数据将指定的一个字节数据b输出到文件输出到文件void write(byte b) throws IOException; 将字节数组将字节数组b中的中的b.length个字节数据输出到文件个字节数据输出到文件void write(byte b,int off,int len) throws IOException; 将字节数组将字节数组b中从下标中从下标off开始,长度为开始,长度为len个字节个字节的数据输出到文件的数据输出到文件3关闭流关闭流void close()throws IOException 关闭输出流关闭输出流实例实例6-1-28使用文件输入输出流实现文件拷贝使用文件输入输出流实现文件拷贝 例例8.3本例程序运行后,若命令行不输入参数,则提本例程序运行后,若命令行不输入参数,则提示:示:java CopyFile sourceFile destinationFile 解释命令解释命令 程序名程序名 args0 args1举例:举例:java CopyFile CopyFile.java c:my.txt将当前目录下的文件本身将当前目录下的文件本身(CopyFile.java)拷贝拷贝到到c盘盘保存文件名为保存文件名为my.txt。8 提高读写效率和增强读写功能提高读写效率和增强读写功能 8增加缓冲增加缓冲 BufferedInputStream类类BufferedOutputStream类类用来连接别的输入输出流用来连接别的输入输出流增加缓冲以获得读写性能上的提高增加缓冲以获得读写性能上的提高缺省的缓冲区大小为缺省的缓冲区大小为512字节,也可指定缓冲区大小字节,也可指定缓冲区大小创建缓冲输入流对象:创建缓冲输入流对象: public BufferedInputStream(InputStream in) public BufferedInputStream(InputStream in,int size) 创建缓冲输出流对象创建缓冲输出流对象 public BufferedOutputStream(OutputStream out) public BufferedOutputStream(OutputStream out,int size) 参数参数size指定缓冲区的字节大小指定缓冲区的字节大小8 提高读写效率和增强读写功能提高读写效率和增强读写功能 例如:例如: FileOutputStream fos=new FileOutputStream(1.dat); BufferedOutputStream bos=new BufferedOutputStream(fos); bos.write(b,0,b.length);/将字节数组将字节数组b的数据输出到缓的数据输出到缓冲区冲区 bos.flush();/清空缓冲区内容到文件清空缓冲区内容到文件1.dat 说明:数据先写入缓冲区,说明:数据先写入缓冲区, 当缓冲区的数据满时,数据才会写入输出流;当缓冲区的数据满时,数据才会写入输出流; 当缓冲区未满时,可用方法当缓冲区未满时,可用方法flush( )将缓冲区的数据强制将缓冲区的数据强制写入文件。写入文件。8提高读写效率和增强读写功能提高读写效率和增强读写功能 缓冲流类分别覆盖了其父类读、写数据的各个缓冲流类分别覆盖了其父类读、写数据的各个read方法和方法和write方法。方法。缓冲区还提供了以下方法:缓冲区还提供了以下方法: 标记读取位置标记读取位置(mark方法方法) 重置标记重置标记(reset方法方法) 跳过指定的字节数跳过指定的字节数(skip方法方法)8 读写基本数据类型数据读写基本数据类型数据 DataInputStream类类DataOutputStream类类两个类分别实现了两个类分别实现了DataInput接口和接口和DataOutput接口接口能读、写基本数据类型的数据能读、写基本数据类型的数据能读、写能读、写Unicode编码编码(UTF-8)格式的字符串格式的字符串两个流类对象接上别的输入、输出流两个流类对象接上别的输入、输出流增强读、写功能增强读、写功能例如:例如: DataInputStream dis = new DataInputStream( new BufferedInputStream( new FileInputStream(openFile.png); 或:或: FileInputStream fis=new FileInputStream(openFile.png); BufferedInputStream bis=new BufferedInputStream(fis); DataInputStream dis = new DataInputStream(bis);