java第八章学习与复习要点

上传人:第*** 文档编号:54404089 上传时间:2018-09-12 格式:PPTX 页数:42 大小:482.25KB
返回 下载 相关 举报
java第八章学习与复习要点_第1页
第1页 / 共42页
java第八章学习与复习要点_第2页
第2页 / 共42页
java第八章学习与复习要点_第3页
第3页 / 共42页
java第八章学习与复习要点_第4页
第4页 / 共42页
java第八章学习与复习要点_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《java第八章学习与复习要点》由会员分享,可在线阅读,更多相关《java第八章学习与复习要点(42页珍藏版)》请在金锄头文库上搜索。

1、河南大学软件学院,Java 编程基础,主讲:李丽,2、File类,3、字节流,1、IO流概述及分类,4、字符流,5、随机访问流,6、标准流,第八章 流,1、IO流概述及分类,大部分程序都需要输入/输出处理,比如从键盘读取数据、向屏幕中输出数据、从文件中读或者向文件中写数据、在一个网络连接上进行读写操作等。 在Java中,对数据的输出输入操作以流的方式进行,J2SDK提供了各种各样的流用以获取不同种类的数据。,1、IO流概述及分类,分类: 按照数据的输入输出方式分为: 输入流(Input Stream)和输出流(Output Stream) 按照处理数据的单位不同分为字节流和字符流。 按照流的功

2、能不同分为节点流和过滤流。,过滤流,J2SDK所提供的所有流类型位于java.io内都分别继承自以下四种抽象流类型。,1、IO流概述及分类,2、File类,在Java中,专门提供了File类来获取和处理磁盘上文件和目录的相关信息。File类是java.io包中唯一处理磁盘文件和目录的类,它定义的对文件和目录操作的方法都是与平台无关的,通过使用File类提供的各种方法能够创建、删除文件和目录,获取磁盘上指定文件和目录的相关信息。,File类的构造方法:,注意:调用构造函数只能创建一个File对象,而不是在文件系统中创建了一个文件,TestFile1.java,如何创建一个文件或目录,1、调用Fi

3、le对象的createNewFile() 2、调用FileOutputStream(),创建一个文件:,创建一个目录: 1、mkdir(); 创建父目录已经存在的目录 2、mkdirs();创建多层目录,String separator = File.separator; String fileName = “myfile.txt“; String directory =“mydir1“+separator+“mydir2“; File f = new File(directory,fileName);,3、字节流,字节流类是专门处理以字节为传输单位的IO流类。我们知道计算机中的数据处理基本上

4、都是以字节为单位进行处理,这类数据保存的文件也称为“二进制文件”,如果要读写这些二进制文件,就需要使用Java中的字节流对象。 InputStream和OutputStream分别是输入字节流与输出字节流的抽象父类。,InputStream抽象类及其派生子类,InputStream类的主要方法,OutputStream抽象类及其派生子类,OutputStream类的主要方法,FileInputStream类的主要构造方法,FileInputStream类,TestFileInputStream.java,FileOutputStream类的构造方法,FileOutputStream类,Test

5、OutPutStream.java,java.io包中提供了FilterInputStream类和FilterOutputStream类分别对其他输入/输出流进行特殊处理,它们在读/写数据的同时可以对数据进行特殊处理。FilterInputStream类和FilterOutputStream类都是抽象类,因此它们均不能实例化对象。 FilterInputStream类有3个子类,它们分别是BufferedInputStream、DataInputStream和PushbackInputStream; FilterOutputStream类也有3个子类,分别是BufferedOutputStre

6、am、DataOutputStream和PrintStream。,过滤流(处理流),BufferedInputStream和BufferedOutputStream类称为缓冲字节流,它引入了针对内存缓冲区的操作,从而提高了读写数据的效率。,BufferedInputStream和BufferedOutputStream,BufferedInputStreamDemo.java,java.io包中提供了ByteArrayInputStream类和ByteArrayOutputStream类,将内存中 byte类型的数组当作流输入来源、输出目的地。ByteArrayInputStream可以从指定

7、的字节数组中读取数据;ByteArrayOutputStream中提供了缓冲区可以存放数据(缓冲区大小可以在构造方法中设定,缺省为32字节),可以用write()方法向其中写入数据,然后用toByteArray()方法将缓冲区中的有效字节写到字节数组中去。,ByteArrayInputStream和ByteArrayOutputStream,DataInputStream和DataOutputStream,java.io包中含有两个DataInputStream和DataOutputStream, 这两个接口设计了一种较为高级的数据输入输出方式:除了可处理字节和字节数组外,还可以处理int、f

8、loat、boolean等基本数据类型,这些数据在文件中的表示方式和它们在内存中的一样,无须转换,它们相应地提供了很多处理基本数据类型的方法,如DataInput提供了read()、readInt()、readByte(),DataOutput提供了write()、writeChar()、 writeFloat()。 而数据流类DataInputStream和DataOutputStream分别实现了DataInput和DataOutput接口,在提供了字节流的读写手段的同时,还可以实现对文件中的不同数据类型的读写。,例:TestDataStream.java,int DataLine(Inp

9、utStream in) DataInputStream data = new DataInputStream(in); String currentLine; int lineCount=0; int charCount=0; while(currentLine=data.readLine()!=null) +lineCount; charCount += currentLine.length(); return (charCount/lineCount); ,利用方法readLine()计算一个输入流中的字符数和行,LineNumberInputStream:主要用于对文本文件的处理,提供

10、了行号控制功能。 已经被LineNumberReader取代 PushBackInputStream:在编译程序的词法分析阶段,经常要超前读入一个字节以界定当前词的属性,然后再将该字节退回(因为下面的处理可能还会用到该字节)。 PushBackInputStream就提供了这样的能力,它提供了一个方法将刚刚读入的字节退回到输入流中去。 PrintStream:其作用是将Java语言中的不同类型的数据以字符表示形式输出到相应的输出流中去。 不产生异常。可自动flush。通过checkError()检查错误。,2、其他过滤流,PrintStream属于输出字节流。 PrintStream提供了重载

11、的print和println方法用于多种数据类型的输出。 PrintStream的输出操作不会抛出异常,用于通过检测错误状态获取错误信息。 PrintStream有自动flush功能。,2、其他过滤流,例:TestPrintStream.java,语言包java.lang中的System类管理标准输入/输出流和错误流。 System.in,从InputStream中继承而来,用于从标准输入设备中获取输入数据(通常是键盘)。 System.out,从PrintStream中继承而来,把输出送到缺省的显示设备(通常是显示器)。 System.err,也是从PrintStream中继承而来,把错误信

12、息送到缺省的显示设备(通常是显示器)。 每当main方法被执行时,就自动生成上述三个对象。,2、标准流,TestStanderdIn.java,TestStanderdOut.java,对象流,对象序列化的目标是将对象保存到磁盘上,或者允许在网络中直接传输对象,对象序列化机制允许把内存中Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久保存在磁盘上,通过网络将这种二进制流传输到另一个网络节点。,序列化:将一个Java对象写入IO流中。 反序列化:从IO流中恢复该Java对象。,如果需将某个对象可以支持序列化机制,必须让它的类是可序列化的,为了让类是可序列化的,该类必须实现如下两个

13、接口之一: Serializable Externalizable Serializable只是一个标记接口,实现该接口无须实现任何方法,它只表明该类的实例是可序列化的。,对象流,使用Serializable接口序列化一个对象。 (1)创建一个ObjectOutputStream,这个输出流是一个处理流,所以必须建立在其它节点流的基础之上。 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(“object.txt”); (2)调用ObjectInputStream对象的writeObject方法输出可序列化

14、对象。 Person per = new Person(“张三”,21); oos.write(per);,对象流,反序列化的步骤: (1)创建一个ObjectInputStream : ObjectInputStream ois = new ObjectInputStream(new FileInputStream(“object.txt”); (2)调用ObjectInputStream对象的readObject方法读取流中的对象,该方法返回一个Object类型的Java对象,需要将该对象转换成其真实的类型。 Person p = (Person)ois.readObject();,对象流

15、,public class Student implements Serializable int id; String name; int age; String department; public Student(int id, String name, int age, String department) this.id=id; this.name=name; this.age=age; this.department =department; ,对象流,public class Objectser public static void main(String args) Stude

16、nt stu=new Student(981036, “Li Ming”, 16, “CSD”); try FileOutputStream fo = new FileOutputStream(“data.txt”); ObjectOutputStream so = new ObjectOutputStream(fo); so.writeObject(stu); so.close(); catch(Exception e) System.out.println(e) ; ,对象流:例子(对象的存储),public class ObjectRecov public static void mai

17、n(String args) Student stu; try FileInputStream fi = new FileInputStream(“data.ser”); ObjectInputStream si = new ObjectInputStream(fi); stu = (Student)si.readObject(); System.out.println(“ID: ”+stu.id+“name:”+ stu.name+“age:”+stu.age+“dept.:”+stu.department); si.close(); catch(Exception e) System.out.println(e); ,

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

当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号