您好,欢迎访问三七文档
第九章输入输出系统教案名称:教案大小:教案类型:WORD文档星级评定:★★★★☆教案简介:Java中的输入/输出处理是通过使用流技术,用统一的接口表示而实现的。输入/输出流中,最常见的是对文件的处理。Java语言中提供专门处理文件和目录的类,例如:java.io.File,java.io.FileInputStream,java.io.FileOutputStream,java.io.RandomAccessFile和接口java.io.FilenameFilter。输入/输出流根据处理的内容,分为字符流和字节流两种,其中字节流是以byte为基本处理单位的流;而字符流是以16位的Unicode码为处理单位的流。下载一【课前思考】1.字节流和字符流的基类各是什么?2.什么是对象的串行化?对象串行化的作用是什么?【学习目标】本讲主要讲述了java语言中的输入/输出的处理,通过本讲的学习,同学们可以编写更为完善的java程序。【学习指南】仔细阅读本章各知识点的内容,深刻理解java语言中输入/输出流的概念,掌握处理问题的方法,多练习,多上机。【难重点】重点:1.遇到实际问题时,要根据需要正确使用各种输入/输出流,特别是对中文使用适当的字符输入流。2.正确使用对象串行化的方法。难点:1.处理字符流时,其构造方法的参数是一个字节流。2.对象串行化的概念。【知识点】9.1I/O流概述9.1.1I/O流的层次9.1.2InputStream和OutputStream9.1.3I/O中的异常9.2文件处理9.2.1文件描述9.2.2文件的顺序处理9.2.3随机访问文件9.3过滤流9.3.1几种常见的过滤流9.4字符流的处理9.4.1Reader和Writer9.4.2InputStreamReader和OutputStreamWriter9.4.3BufferedReader和BufferedWriter9.5对象的串行化9.5.1串行化的定义9.5.2串行化方法9.5.3串行化的注意事项第九章输入输出系统9.1I/O流概述输入/输出处理是程序设计中非常重要的一部分,比如从键盘读取数据、从文件中读取数据或向文件中写数据等等。Java把这些不同类型的输入、输出源抽象为流(stream),用统一接口来表示,从而使程序简单明了。Jdk提供了包java.io,其中包括一系列的类来实现输入/输出处理。下面我们对java.io包的内容进行概要的介绍。9.1.1I/O流的层次1.字节流2.字符流3.对象流4.其它1.字节流:从InputStream和OutputStream派生出来的一系列类。这类流以字节(byte)为基本处理单位。◇InputStream、OutputStream◇FileInputStream、FileOutputStream◇PipedInputStream、PipedOutputStream◇ByteArrayInputStream、ByteArrayOutputStream◇FilterInputStream、FilterOutputStream◇DataInputStream、DataOutputStream◇BufferedInputStream、BufferedOutputStream2.字符流:从Reader和Writer派生出的一系列类,这类流以16位的Unicode码表示的字符为基本处理单位。◇Reader、Writer◇InputStreamReader、OutputStreamWriter◇FileReader、FileWriter◇CharArrayReader、CharArrayWriter◇PipedReader、PipedWriter◇FilterReader、FilterWriter◇BufferedReader、BufferedWriter◇StringReader、StringWriter3.对象流◇ObjectInputStream、ObjectOutputStream4.其它◇文件处理:File、RandomAccessFile;◇接口DataInput、DataOutput、ObjectInput、ObjectOutput;9.1.2InputStream和OutputStream1.InputStream2.OutputStream1.InputStream◇从流中读取数据:intread();//读取一个字节,返回值为所读的字节intread(byteb[]);//读取多个字节,放置到字节数组b中,通常//读取的字节数量为b的长度,返回值为实际//读取的字节的数量intread(byteb[],intoff,intlen);//读取len个字节,放置到以下标off开始//数组b中,返回值为实际读取的字节的数量intavailable();//返回值为流中尚未读取的字节的数量longskip(longn);//读指针跳过n个字节不读,返回值为实际//跳过的字节数量◇关闭流:close();//流操作完毕后必须关闭◇使用输入流中的标记:voidmark(intreadlimit);//记录当前读指针所在位置,readlimit表示读指针//读出readlimit个字节后所标记的指针位置才失效voidreset();//把读指针重新指向用mark方法所记录的位置booleanmarkSupported();//当前的流是否支持读指针的记录功能有关每个方法的使用,详见javaAPI。2.OutputStream◇输出数据:voidwrite(intb);//往流中写一个字节bvoidwrite(byteb[]);//往流中写一个字节数组bvoidwrite(byteb[],intoff,intlen);//把字节数组b中从//下标off开始,长度为len的字节写入流中◇flush()//刷空输出流,并输出所有被缓存的字节由于某些流支持缓存功能,该方法将把缓存中所有内容强制输出到流中。◇关闭流:close();//流操作完毕后必须关闭9.1.3I/O中的异常进行I/O操作时可能会产生I/O异常,属于非运行时异常,应该在程序中处理。如:FileNotFoundException,EOFException,IOException9.2文件处理I/O处理中,最常见的是对文件的操作,java.io包中有关文件处理的类有:File、FileInputStream、FileOutputStream、RamdomAccessFile和FileDescriptor;接口有:FilenameFilter。9.2.1文件描述类File提供了一种与机器无关的方式来描述一个文件对象的属性。下面我们介绍类File中提供的各种方法。◇文件或目录的生成publicFile(Stringpath);/*如果path是实际存在的路径,则该File对象表示的是目录;如果path是文件名,则该File对象表示的是文件。*/publicFile(Stringpath,Stringname);//path是路径名,name是文件名publicFile(Filedir,Stringname);//dir是路径名,name是文件名◇文件名的处理StringgetName();//得到一个文件的名称(不包括路径)StringgetPath();//得到一个文件的路径名StringgetAbsolutePath();//得到一个文件的绝对路径名StringgetParent();//得到一个文件的上一级目录名StringrenameTo(FilenewName);//将当前文件名更名为给定文件的完整路径◇文件属性测试booleanexists();//测试当前File对象所指示的文件是否存在booleancanWrite();//测试当前文件是否可写booleancanRead();//测试当前文件是否可读booleanisFile();//测试当前文件是否是文件(不是目录)booleanisDirectory();//测试当前文件是否是目录◇普通文件信息和工具longlastModified();//得到文件最近一次修改的时间longlength();//得到文件的长度,以字节为单位booleandelete();//删除当前文件◇目录操作booleanmkdir();//根据当前对象生成一个由该对象指定的路径Stringlist();//列出当前目录下的文件【例9-1】importjava.io.*;//引入java.io包中所有的类publicclassFileFilterTest{publicstaticvoidmain(Stringargs[]){Filedir=newFile(d://ex);//用File对象表示一个目录Filterfilter=newFilter(java);//生成一个名为java的过滤器System.out.println(listjavafilesindirectory+dir);Stringfiles[]=dir.list(filter);//列出目录dir下,文件后缀名为java的所有文件for(inti=0;ifiles.length;i++){Filef=newFile(dir,files[i]);//为目录dir下的文件或目录创建一个File对象if(f.isFile())//如果该对象为后缀为java的文件,则打印文件名System.out.println(file+f);elseSystem.out.println(subdirectory+f);//如果是目录则打印目录名}}}classFilterimplementsFilenameFilter{Stringextent;Filter(Stringextent){this.extent=extent;}publicbooleanaccept(Filedir,Stringname){returnname.endsWith(.+extent);//返回文件的后缀名}}9.2.2文件的顺序处理类FileInputStream和FileOutputStream用来进行文件I/O处理,由它们所提供的方法可以打开本地主机上的文件,并进行顺序的读/写。例如,下列的语句段是顺序读取文件名为text的文件里的内容,并显示在控制台上面,直到文件结束为止。FileInputStreamfis;try{fis=newFileInputStream(text);System.out.print(contentoftextis:);intb;while((b=fis.read())!=-1)//顺序读取文件text里的内容并赋值给整型变量b,直到文件结束为止。{System.out.print((char)b);}}catch(FileNotFoundExceptione){System.out.println(e);}catch(IOExceptione){System.out.println(e);}9.2.3随机访问文件对于InputStream和OutputStream来说,它们的实例都是顺序访问流,也就是说,只能对文件进行顺序地读/写。随机访问文件则允许对文件内容进行随机读/写。在java中,类RandomAccessFile提供了随机访问文件的方法。类RandomAccessFile的声明为:publicclassRandomAccessFileextendsObjectimplementsDataInput,DataOutput接口DataInput中定义的方法主要包括从流中读取基本类型的数据、读取一行数据、或者读取指定长度的字节数。如:readBoolean()、readInt()、readLine()、readFully()等。接口DataOutput中定义的方法主要是向流中写入基本类型的数据、或者写入一定长度的字节数组。如:write
本文标题:第九章输入输出系统
链接地址:https://www.777doc.com/doc-2184674 .html