资源预览内容
第1页 / 共58页
第2页 / 共58页
第3页 / 共58页
第4页 / 共58页
第5页 / 共58页
第6页 / 共58页
第7页 / 共58页
第8页 / 共58页
第9页 / 共58页
第10页 / 共58页
亲,该文档总共58页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Java语言程序设计第六章 文件与数据处理,讲授人:傅晓阳 教授,www.jluzh.com,DavidFu,上章回顾,定义一个班级类StudentClass,在班级类中有一自定义类型student数组域,用来定义该班级有50个学生。ArrayIndexOutOfBoundsException ArithmeticException,NumberFormatException是什么异常?异常处理的5个关键字是什么,throw 与throws有什么区别,www.jluzh.com,DavidFu,本章课程纲要,控制台操作和文件操作,字节流和字符流,www.jluzh.com,DavidFu,本课程纲要,标准输入输出流,字节流和字符流概述,字节流和字符流,数组流和字符串流,数据流和缓冲流,www.jluzh.com,DavidFu,字节流和字符流概述,java.io类包中提供了两个用于字节流操作的抽象类:InputStreamOutputSteam 这些类只能作为基类使用,不能独立创建实例对象,必须使用其非抽象的子类来实现具体操作,www.jluzh.com,DavidFu,InputStream类的子类,www.jluzh.com,DavidFu,FilterInputStream 类的子类,www.jluzh.com,DavidFu,FilterInputStream 类的子类,www.jluzh.com,DavidFu,OutputStream类的子类,www.jluzh.com,DavidFu,字节流和字符流概述,java.io类包中提供了两个用于字符流操作的抽象类:ReaderWriter这些类只能作为基类使用,不能独立创建实例对象,必须使用其非抽象的子类来实现具体操作,www.jluzh.com,DavidFu,Reader类的子类,www.jluzh.com,DavidFu,Writer类的子类,www.jluzh.com,DavidFu,本课程纲要,标准输入输出流,字节流和字符流概述,字节流和字符流,数组流和字符串流,数据流和缓冲流,www.jluzh.com,DavidFu,标准输入输出流,www.jluzh.com,DavidFu,标准输入输出流,类java.lang.System中的成员方法用于实现重定向功能: public static void setIn(InputStream in)将标准输入流重定向到参数in指向的输入流。Public static void setout(PrintStream out)将标准输出流重定向为参数out指向的输出流。Public static void setError(PrintStream err)将标准错误流重定向为参数err指向的输出流。,www.jluzh.com,DavidFu,本课程纲要,标准输入输出流,字节流和字符流概述,字节流和字符流,数组流和字符串流,数据流和缓冲流,www.jluzh.com,DavidFu,数组流,字节输入流java.io.ByteArrayInputStream字节输出流java.io.ByteArrayOutputStream分别使用数组作为流的源和目标。ByteArrayInputStream 包含一个内部缓冲区,该缓冲区存储从流中读取的字节。ByteArrayOutputStream实现一个输出流,其中也包含一个内部缓冲区,数据被写入字节数组,缓冲区会随着数据的不断写入而自动增长。,www.jluzh.com,DavidFu,数组流,ByteArrayInputStream类的构造方法如下:Public ByteArrayInputStream (byte buf)Public ByteArrayInputStream(byte buf ,int offset, int length) 第一个构造方法构造的数组字节流的源是参数buf数组。第二个构造方法构造的数组字节流的源是参数为buf的数组的部分单元,这些单元是该数组从偏置参数offset开始计算的length个字节单元。,www.jluzh.com,DavidFu,数组流,ByteArrayOutputStream类的构造方法如下:Public ByteArrayOutStream( )Public ByteArrayOutStream(int size)第一个构造方法的数组字节输出流指向一个默认大小为32字节的缓冲区。第二个构造方法所需要的数组字节输出流缓冲区的初始大小由参数size确定。如果写入数据大于缓冲区时,缓冲区的容量也会自动增大。,www.jluzh.com,DavidFu,字符串流,在Reader类和Writer类中分别包含了两对子类:CharArrayReader类和StringReader类;CharArrayWriter类和StringWriter类。CharArrayReader类构造方法如下:public CharArrayReader(byte buf)public CharArrayReader(byte buf, int offset, int length)StringReader类构造方法如下:Public StringReader(String str),www.jluzh.com,DavidFu,字符串流,将浮点类型的数据,转换成字符串进行输出:StringWriter strOut=new StringWriter( );PrintWriter pWriter=new PrintWriter(strOut);float f=1.5f;pWriter.println(f);StringBuffer str=strOut.getBuffer( );,www.jluzh.com,DavidFu,本课程纲要,标准输入输出流,字节流和字符流概述,字节流和字符流,数组流和字符串流,数据流和缓冲流,www.jluzh.com,DavidFu,数据流,java.io.DataInputStreamjava.io.DataOutputStream用于读取与存储基本数据类型的数据。数据输入流与输出流确保数据流的存储格式与基本数据类型在内存中的存储格式一致这种数据操作与系统平台的相关性较小。,www.jluzh.com,DavidFu,数据流,DataInputStream的构造方法如下:Public DataInputStream(InputStream in) FileInputStream fin=new FileInputStream(“DataInput.txt”);DataInputStream din=new DataInputStream(fin);通常也可以将以上两句合并成一条语句完成:DataInputStream din=new DataInputStream(new FileInputStream(“DataInput.txt”);DataOutputStream的构造方法为:Public DataOutputStream(OutputStream out)其中参数out是任何基本输出流的实例对象。,www.jluzh.com,DavidFu,数据流,www.jluzh.com,DavidFu,数据流,www.jluzh.com,DavidFu,数据流,具体用法参见实例6-1 DataInoutStream.java,www.jluzh.com,DavidFu,缓冲流,对于字节流,带缓存的输入流和输出流分别为:java.io.BufferedInputStream类java.io.BufferedOutputStream类;对于字符流,带缓存的输入流和输出流分别java.io.BufferedReader类java.io.BufferedWriter类。 作用:在读取较多数据时,可以将一个较大的数据块读取到内存中,或将在内存中一个比较大的数据块一次性写入到指定的数据终端中,从而达到了提高大规模数据读写的效率。,www.jluzh.com,DavidFu,缓冲流,类java.io.BufferedInputStream的构造方法为:public BufferedInputStream(InputStream in)参数in指定输入流对象实例为抽象基类InputStream类型的对象,根据java的多态性可知,所有InputStream类的非抽象子类的实例对象都可以作为其参数。public BufferedInputStream(InputStream in, int size)size表示缓冲区的大小。第一个构造方法没有指定缓冲区的大小,因此缓冲区的大小由系统指定。,www.jluzh.com,DavidFu,缓冲流,类java.io.BufferedOutputStream的构造方法为:public BufferedOutputStream(OutputStream out)参数out指定输出流。public BufferedOutputStream(OutputStream out, int size)参数size指定了缓冲区的大小。不含size的构造方法的缓冲区大小由系统指定。参见例题6-2,对比了带缓存与不带缓存的数据流的读写速度差别,www.jluzh.com,DavidFu,本章课程纲要,控制台操作和文件操作,字节流和字符流,www.jluzh.com,DavidFu,本课程纲要,文件输入输出流操作,控制台操作,控制台操作和文件操作,FileReader和FileWriter,文件目录操作和随机存取操作,www.jluzh.com,DavidFu,控制台操作字节流,从键盘输入采用标准输入流对象System.in,而该对象的类型是InputStream类用户从控制台获取数据,必须能够扫描键盘输入的字符流,并取出对应的数据。 从键盘读取数据 java.io.InputStreamReader的构造方法为:Public InputStreamReader(InputStream in)参数in是字节流的实例对象,该构造方法可以将字节流的数据转换成字符流输入方式输入数据。,www.jluzh.com,DavidFu,控制台操作字节流,向控制台输出数据 java.io.OutputStreamWriter的构造方法为:Public OutputStreamWriter(OutputStream out)参数out是字节流的实例对象,该构造方法将字符流转换成字节流输出方式输出数据。,www.jluzh.com,DavidFu,控制台操作字符流,在控制台输入输出操作中,使用BufferedReader和BufferedWriter进行字符数据的操作java.io.BufferedReader类的构造方法为:public BufferedReader(Reader in) 参数in是字符输入流的实例对象,类型为抽象基类Reader。 java.io.BufferedWriter类的构造方法为:public BufferedWriter(Writer out)参数out是字符输出流的实例对象,类型为抽象基类Writer。所有Writer类的非抽象的子类的实例都可以作为BufferedWriter的输出参数。,www.jluzh.com,DavidFu,控制台操作字符数据输入流实例,从控制台输入输出将使用标准输入输出流,因此创建字符数据输入流实例对象的语句为:BufferedReader br=new BufferedReader( new InputStreamReader(System.in);System.in是保存从键盘输入数据的标准字节输入流。通过桥接类InputStreamReader类的转换,将字节流的数据转换成可以直接读取的字符流的数据,保存在InputStreamReader类的对象中。InputStreamReader类的实例对象作为BufferReader类的构造方法的参数。 参见实例6-3 BufferedReaderWriter.java,
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号