chapter12 输入和输出流处理

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

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

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

资源描述

第11章输入和输出流处理2教学目标输入和输出流概述输入流和输出流字节流和字符流输入和输出类的继承层次结构File类基于字节的输入和输出类及应用实例抽象类InputStream和OutputStreamFileInputStream和FileOutputStream类随机访问文件类过滤字节流3教学目标(续)标准输入输出流对象流管道流内存读写流序列输入流基于字符的输入和输出类及应用实例InputStreamReader和OutputStreamWriter类BufferedReader和BufferedWriter类其它字符流411.1输入和输出流概述本节概述输入流和输出流、字节流和字符流的概念,以及处理输入和输出流相关的系统的类所在的包以及类的继承层次结构,为学习后续的各节打下了基础。511.1.1输入流和输出流程序往往需要输入/输出处理,比如从键盘读取数据、向屏幕中输出数据、从文件中读数据或者向文件中写数据、在一个网络连接上进行读写操作等。在Java中,把这些不同类型的输入、输出源抽象为流(Stream)而其中输入或输出的数据则称为数据流(DataStream),用统一的接口来表示。数据流是指一组有顺序的、有起点和终点的字节集合。611.1.1输入流和输出流Java的流分类:输入流(InputStream):输入流是能够读取字节序列的对象,和输出流(OutputStream):输出流是能够写字节序列的对象。如一个文件,当向其中写数据时,它就是一个输出流;当从其中读取数据时,它就是一个输入流。例如,键盘是一个输入流,屏幕是一个输出流。711.1.2字节流和字符流Java2定义了两种类型的流:字节流:以byte(8bits)为基本处理单位的流,这些类分别由抽象类InputStream和OutputStream派生的类层次。字符流:处理使用Unicode(每个字符使用两个字节)的数据,是从抽象类Reader和Writer的派生的类层次,用于读写双字节的Unicode字符.8面向字节流的输入输出类层次结构ByteArrayInputStreamInputStreamFileInputStreamFilterInputStreamObjectInputStreamPipedInputStreamSequenceInputStreamStringBufferInputStreamBufferedInputStreamPushbackInputStreamLineNumberInputStreamDataInputStreamObjectInputDataInputDataOutputRandomAccessFileByteArrayOutputStreamOutputStreamFileOutputStreamFilterOutputStreamObjectOutputStreamPipedOutputStreamBufferedOutputStreamPrintStreamDataOutputStreamObjectOutputjava.lang.Object9BufferedReaderReaderCharArrayReaderFilterReaderInputStreamReaderPipedReaderStringReaderPushbackReaderLineNumberReaderFileReaderCharArrayWriterWriterFilterWriterOutputStreamWriterBufferedWriterPipedWriterObjectPrintWriterStringWriterFileWriter面向字符流的输入输出类层次结构1011.2File类File类主要用于获取磁盘中文件或目录的各种信息。构造File类的对象的构造函数:publicFle(StringpathName)指定与File对象关联的文件或目录的名称。pathName可以是包含路径信息的文件名或目录名。路径可为绝对路径或为相对路径。1111.2File类(续)例如:Filef=newFile(“data\temp.dat”);//相对路径Fileg=newFile(“d:\java\data\temp.dat”);//绝对路径File类的一些常见方法:StringgetName():返回文件名;StringgetParent():返回文件所在目录名;StringgetPath():返回文件路径;StringgetAbsolutePath():返回绝对路径;booleanexists():文件是否存在;booleancanWrite():文件是否可写、读;1211.2File类(续)booleanisFile():是否为文件booleanisDirectory():是否为目录;longlastModified():文件的最后修改日期;longlength():返回文件的长度;booleandelete():删除文件或目录。删除成功返回true,否则返回false;booleanmkdir();创建一个目录。目录创建成功,返回true,否则返回false;String[]list():返回一个代表目录下的所有文件的字符串数组。1311.2File类(续)例如Filef=newFile(“data\temp.dat”);上述引用变量f调用相应的方法,得到的值:f.getName():返回temp.datf.getParent():返回dataf.getPath():返回data\temp.datf.getAbsolutePath():返回d:\java\data\temp.datf.exists():若data\temp.dat文件存在返回true,否则返回false1411.2File类(续)File类另一构造函数:publicFile(URIuri)使用给定的URI(uniformresourceidentifier,URI)对象来定位文件。用于定位Web站点上的资源.例如,是一个Web站点的URL。用于定位文件的URI因操作系统的不同而不同。在Windows平台上,URI是:file://c:/data.txt指定文件data.txt存储在c盘的根目录下。1511.3基于字节的输入和输出类及应用实例抽象类InputStream和OutputStreamFileInputStream和FileOutputStream类随机访问文件类过滤字节流标准输入输出流对象流管道流内存读写流序列输入流16抽象类InputStream和OutputStreamJava中每一种字节流的基本功能依赖于基类InputStream(输入流类)和OutputStream(输出流类),它们都是抽象类,不能直接使用。InputStream和OutputStream类分别声明了基于字节的输入和输出方法。属于InputStream类的方法:read():从流中读入数据;skip():跳过数据流中指定数量的字节不读,返回值表示实际跳过的字节数;available():返回流中可用字节数;mark():在流中当前位置标记一个位置;reset():返回上一个标记过的位置,用于从这一位置读取;17抽象类InputStream和OutputStream(续)markSupport():是否支持标记和复位操作;close():关闭流。在InputStream类中,方法read()提供了三种从流中读数据的方法:intread():从输入流中读一个字节,形成一个0~255之间的整数返回;intread(byteb[]):读多个字节到数组中,填满整个数组;intread(byteb[],intoff,intlen):从输入流中读取长度为len的数据,写入数组b中从索引off开始的位置,并返回读取得字节数。对于上面的三个方法,若返回-1,表明流结束。18抽象类InputStream和OutputStream(续)属于OutputStream类的方法:write(intb):将一个整数输出到流中(只输出低位字节,为抽象方法);write(byteb[]):将字节数组中的数据输出到流中;write(byteb[],intoff,intlen):将数组b中从off指定的位置开始,长度为len的数据输出到流中;flush():刷空输出流,并将缓冲区中的数据强制送出;close():关闭流。19FileInputStream和FileOutputStream类(续)FileInputStream(文件输入流类)和FileOutputStream(文件输出流类)是基于字节的被广泛用于操作顺序文件的两个类。FileInputStream类:用于打开一个输入文件。若要打开的文件不存在,则会产生异常FileNotFoundException,这是一个非运行时异常,必须在方法中捕获或向上传递抛出异常。FileOutputStream类:用于打开一个输出文件。若要打开的文件不存在,则会创建一个新的文件,否则原文件的内容会被新写入的内容所覆盖。如果试图打开一个只读文件,将会引发一个IOException异常。在进行文件的读/写操作时,会产生非运行时异常IOException,必须在方法中捕获或向上传递抛出异常。20FileInputStream和FileOutputStream类(续)创建输入文件流对象和输出文件流对象的的语句如下:Filef1=newFile(“file1.txt”);//创建File对象Filef2=newFile(“file2.txt”);FileInputStreamin=newFileInputStream(f1);//向FileInputStream构造函数传递一个File对象FileOutputStreamout1=newFileOutputStream(f2);//向FileOutputStream构造函数传递一个File对象FileOutputStreamout2=newFileOutputStream(“file3.txt”);输入流的构造函数的参数是用于指定输入的文件名,输出流的构造函数参数则是用于指定输出的文件名。21publicFileOutputStream(Filefile,booleanappend)throwsFileNotFoundExceptionCreatesafileoutputstreamtowritetothefilerepresentedbythespecifiedFileobject.Ifthesecondargumentistrue,thenbyteswillbewrittentotheendofthefileratherthanthebeginning.AnewFileDescriptorobjectiscreatedtorepresentthisfileconnection.First,ifthereisasecuritymanager,itscheckWritemethodiscalledwiththepathrepresentedbythefileargumentasitsargument.Ifthefileexistsbutisadirectoryratherthanaregularfile,doesnotexistbutcannotbecreated,orcannotbeopenedforanyotherreasonthenaFileNotFoundExceptionisthrown.Parameters:file-thefiletobeopenedforwriting.append-iftrue,thenbyteswillbewrittentotheendofth

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

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

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

×
保存成功