Java语言程序设计基础教程课件(第8章)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第8章文件和流I/O流概述文件处理过滤流字符流的处理对象的序列化其他常用的流8.1I/O流概述输入/输出处理是程序设计中非常重要的一部分,比如从键盘读取数据、从文件中读取数据或向文件中写数据等等。Java把这些不同类型的输入、输出源抽象为流(stream),用统一接口来表示,从而使程序简单明了。Jdk提供了包java.io,其中包括一系列的类来实现输入/输出处理。下面我们对java.io包的内容进行概要的介绍。8.1.1I/O流的层次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、StringWriter3.对象流◇ObjectInputStream、ObjectOutputStream4.其它◇文件处理:File、RandomAccessFile;◇接口DataInput、DataOutput、ObjectInput、ObjectOutput;8.1.2InputStream和OutputStream1.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();当前的流是否支持读指针的记录功能2.OutputStream◇输出数据:voidwrite(intb);往流中写一个字节bvoidwrite(byteb[]);往流中写一个字节数组bvoidwrite(byteb[],intoff,intlen);把字节数组b中从下标off开始,长度为len的字节写入流中◇flush()刷空输出流,并输出所有被缓存的字节,由于某些流支持缓存功能,该方法将把缓存中所有内容强制输出到流中。◇关闭流:close();流操作完毕后必须关闭8.1.3I/O中的例外进行I/O操作时可能会产生I/O例外,属于非运行时例外,应该在程序中处理。如:FileNotFoundException,EOFException,IOException。8.2文件处理I/O处理中,最常见的是对文件的操作,java.io包中有关文件处理的类有:File、FileInputStream、FileOutputStream、RamdomAccessFile和FileDescriptor;接口有:FilenameFilter。8.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();列出当前目录下的文件importjava.io.*;//引入java.io包中所有的类publicclassep8_1{publicstaticvoidmain(Stringargs[]){Filedir=newFile(c://java_work//8);//用File对象表示一个目录Filterfilter=newFilter(java);//生成一个名为java的过滤器System.out.println(listjavafilesindirectory+dir);Stringfiles[]=dir.list(filter);//列出目录下,文件后缀名为java的所有文件for(inti=0;ifiles.length;i++){Filef=newFile(dir,files[i]);//为目录下的文件或目录创建一个File对象if(f.isFile())//如果该对象为后缀为java的文件,则打印文件名System.out.println(file+f);elseSystem.out.println(subdirectory+f);//如果是目录则打印目录名}}}classFilterimplementsFilenameFilter{Stringextent;Filter(Stringextent){this.extent=extent;}publicbooleanaccept(Filedir,Stringname){returnname.endsWith(.+extent);//返回文件的后缀名}}程序运行后的结果如下所示,首先列出当前工作目录,然后将当前目录下面的所有文件取出,根据过滤器设置,显示后缀为java的所有文件。8.2.2文件的顺序处理类FileInputStream和FileOutputStream用来进行文件I/O处理,由它们所提供的方法可以打开本地主机上的文件,并进行顺序的读/写。下面示例程序ep8_2的语句段中,顺序读取当前目录下文件名为text.txt的文件里的内容,并显示在控制台上面,直到文件结束为止。文件text.txt的内容为:welcome!。如果当前目录下未找到文件text.txt,程序运行时会报错。【例8-2】一个顺序读取文本文件的例子。importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;publicclassep8_2{publicstaticvoidmain(String[]args){FileInputStreamfis;try{fis=newFileInputStream(text.txt);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);}}}程序运行结果如下所示:8.2.3随机访问文件对于InputStream和OutputStream来说,它们的实例都是顺序访问流,也就是说,只能对文件进行顺序地读/写。随机访问文件则允许对文件内容进行随机读/写。在java中,类RandomAccessFile提供了随机访问文件的方法。RandomAccessFile类既不是输入流InputStream的子类,也不是输出流OutputStream的子类。RandomAccessFile类创建的流的指向既可以作为源也可以作为目的地,当想对一个文件进行读写操作时,可以创建一个指向该文件的RandomAccessFile流即可。类RandomAccessFile的声明为:publicclassRandomAccessFileextendsObjectimplementsDataInput,DataOutput接口DataInput中定义的方法主要包括从流中读取基本类型的数据、读取一行数据、或者读取指定长度的字节数。如:readBoolean()、readInt()、readLine()、readFully()等。接口DataOutput中定义的方法主要是向流中写入基本类型的数据、或者写入一定长度的字节数组。如:writeChar()、writeDouble()、write()等。◇构造方法:RandomAccessFile(Stringname,Stringmode);参数name确定一个文件名,参数mode是打开方式,决定流对文件的访问权限。例如r表示只读,rw表示可读写。RandomAccessFile(Filefile,Stringmode);参数file是一个文件对象,参数mode是打开方式,决定流对文件的访问权限。例如r表示只读,rw表示可读写。◇文件流指针的操作longgetFilePointer();用于得到流的当前的文件流指针位置。voidseek(longpos);用于移动文件流指针到指定的位置。intskipBytes(intn);使文件流指针

1 / 61
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功