第9章IO流与.ppt
《第9章IO流与.ppt》由会员分享,可在线阅读,更多相关《第9章IO流与.ppt(69页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第第第9 9章章章章I/OI/O流与文件流与文件流与文件流与文件2 2本章内容本章内容u输入流输入流u输出流输出流u文件文件3 39.1文件与流的概念文件与流的概念9.1.1文件的基本概念文件的基本概念u文件:存储在磁盘上数据的集合,具有文件:存储在磁盘上数据的集合,具有“永久性永久性”u文件中的数据以连续的字节或字符形式文件中的数据以连续的字节或字符形式存在,并没有明显的结构存在,并没有明显的结构u组成文件的字节序列或字符序列分别被组成文件的字节序列或字符序列分别被称为字节称为字节流流或字符或字符流流u流(流(Stream):在计算机的输入与输在计算机的输入与输出之间的数据序列;按一定顺序
2、排列的出之间的数据序列;按一定顺序排列的数据的集合数据的集合uJava把不同的数据源与程序间的数据把不同的数据源与程序间的数据传输都抽象表述为传输都抽象表述为“流流”uJava中的数据流有中的数据流有字节流(位流)字节流(位流)和和字符流字符流之分之分uJava命名惯例:命名惯例:n凡是以凡是以InputStream或或OutputStream结尾的类均为字结尾的类均为字节流节流n凡是以凡是以Reader或或Writer结尾的类结尾的类均为字符流。均为字符流。9.1.2流的基本概念流的基本概念Reader类类Writer类类InputStream类类OutputStream类类1字符字符=2字
3、节字节u就流的运动方向而言,流可分为:就流的运动方向而言,流可分为:n输入流输入流(input stream):):代表流代表流入计算机的数据序列入计算机的数据序列n输出流输出流(output stream):代表):代表从计算机流出的数据序列从计算机流出的数据序列u输入流:程序打开数据源上的一个流输入流:程序打开数据源上的一个流(文文件或内存等件或内存等),然后按顺序读入这个流中,然后按顺序读入这个流中的数据的数据u输出流:程序打开一个目的地的流,然输出流:程序打开一个目的地的流,然后按顺序从程序向这个目的地输出数据后按顺序从程序向这个目的地输出数据u输入和输出的方向是以程序为基准的输入和输
4、出的方向是以程序为基准的u通常,也把从输入流中输入数据到程序中通常,也把从输入流中输入数据到程序中称为称为读数据读数据(read),反之,从程序中将),反之,从程序中将数据输出到输出流中称为数据输出到输出流中称为写数据写数据(write)u具体步骤一般为:具体步骤一般为:打开一个流打开一个流while(数据存在时数据存在时)读数据或写数据读数据或写数据关闭流关闭流9.2字节输入字节输入/输出流输出流u派生自派生自InputStreamInputStream和和OutputStreamOutputStreamu常用的字节流主要有:常用的字节流主要有:nInputStreamInputStream
5、和和OutputStreamOutputStreamnFileInputStreamFileInputStream和和FileOutputStreamFileOutputStreamnDataInputStreamDataInputStream和和DataOutputStreamDataOutputStreamnObjectInputStreamObjectInputStream和和ObjectOutputStreamObjectOutputStreamnBufferedInputStreamBufferedInputStream和和BufferedOutputStreamBufferedOu
6、tputStreamnByteArrayInputStreamByteArrayInputStream和和ByteArrayOutputStreamByteArrayOutputStreamJava借助借助Java.io包实包实现输入输出现输入输出InputStream类层次类层次InputStreamFileInputStreamPipedInputStreamObjectInputStreamSequenceInputStreamFilterInputStreamStringBufferInputStreamByteArrayInputStreamDataInputStreamBuffer
7、edInputStreamPushbackInputStreamLineNumberInputStream9.2.1InputStream和和FileInputStreamu抽象类抽象类java.io.InputStream是所有字节输入流类的是所有字节输入流类的父类,定义了以字节为单位读取数据的基本方法,父类,定义了以字节为单位读取数据的基本方法,并在其子类中进行了分化和实现并在其子类中进行了分化和实现u三个基本三个基本read方法:方法:nintread()/从输入流读取下一个字节并返回。从输入流读取下一个字节并返回。返回值的范围从返回值的范围从0到到255,如果已经到达数据流,如果已经到
8、达数据流的结尾,则返回的结尾,则返回-1nintread(bytebuffer)/从输入流中读取若干从输入流中读取若干字节放进数组字节放进数组buffer中,并返回读到的字符数,中,并返回读到的字符数,最多可读取和最多可读取和buffer长度相等的字符数,如果读长度相等的字符数,如果读取失败则返回取失败则返回-1nintread(bytebuffer,intoffset,intlength)/从输入流中读从输入流中读length个字节到数组个字节到数组buffer中。中。offset是写入数组的位置(位移)是写入数组的位置(位移)抽象方法抽象方法1111其它方法:其它方法:voidclose(
9、)/关闭输入流,释放相关关闭输入流,释放相关系统资源系统资源intavailable()/返回输入流中可读返回输入流中可读取的字节数取的字节数skip(longn)/跳过流中若干字节数,跳过流中若干字节数,返回实际跳过的字节数返回实际跳过的字节数booleanmarkSupported()/是否支是否支持标记和复位操作持标记和复位操作voidmark(intreadlimit)/在流中当在流中当前位置作标记前位置作标记voidreset()/返回最近标记的位置返回最近标记的位置不执行任不执行任何操作何操作【例例9-1】InputStream类的使用类的使用importjava.io.Input
10、Stream;importjava.io.IOException;publicclassInputStreamUsepublicInputStreamUse(InputStreamin)trywhile(true)inti=in.read();charc=(char)i;System.out.print(c);catch(IOExceptione)System.out.print(e);e.printStackTrace();publicstaticvoidmain(Stringargs)newInputStreamUse(System.in);System.out.println(Syste
11、m.in引用的对象的类是:引用的对象的类是:+System.in.getClass().getName();该语句执行后的输出为:该语句执行后的输出为:System.in引用的对象的类是:引用的对象的类是:java.io.BufferedInputStream多态:多态:父类引用指父类引用指向子类对象向子类对象很有可能出现异很有可能出现异常,最好处理常,最好处理 FileInputStream类类 uFileInputStream类(文件输入流)是类(文件输入流)是InputStream类的子类类的子类u它们所提供的方法可以顺序读它们所提供的方法可以顺序读/写本地主写本地主机上的文件机上的文件
12、u对文件内容的操作步骤如下:对文件内容的操作步骤如下:n创建文件对应的输入创建文件对应的输入/输出或者读写器输出或者读写器的实例对象,以获取相关的资源文件。的实例对象,以获取相关的资源文件。如所需内存空间以及文件的访问权限如所需内存空间以及文件的访问权限n对文件进行读(输入)对文件进行读(输入)/写(输出)操写(输出)操作作n调用调用close()方法方法,关闭文件,释放所,关闭文件,释放所占用的系统资源占用的系统资源【例例9-2】FileInputStream类的使用(类的使用(import java.io.FileInputStream;import java.io.*;public cl
13、ass FileInputStreamUse public FileInputStreamUse()tryFileInputStream f=new FileInputStream(数字数字.txt);int i;int b=f.read();/读取文件中的数据读取文件中的数据 for(i=0;b!=-1;i+)System.out.print(char)b);b=f.read();System.out.println();System.out.println(文件字节数为文件字节数为+i);f.close();catch(IOException e)System.err.println(e)
14、;e.printStackTrace();public static void main(String args)new FileInputStreamUse();“数字数字.txt”是和是和该类在同一目录该类在同一目录下的文本文件名下的文本文件名9.2.2OutputStream和和FileOutputStreamu字节输出流字节输出流抽象类抽象类OutputStream是所有字是所有字节输出流类型的抽象父类节输出流类型的抽象父类,为其它输出字节流,为其它输出字节流子类提供了一些基本方法和标准接口子类提供了一些基本方法和标准接口u三个基本的三个基本的write方法:方法:nvoid writ
15、e(int c)/写入一个字节到写入一个字节到输出流:将输出流:将c的的低位低位写入,忽略写入,忽略24个高位个高位nvoid write(byte buffer)/将数组将数组buffer中的数据写入输出流中的数据写入输出流nvoid write(byte buffer,int offset,int length)/将将buffer数组中数组中从第从第offset个字节开始,共个字节开始,共length个字节个字节写入输出流写入输出流u其它方法:其它方法:nvoid close()/void close()/关闭输出流,关闭输出流,释放相关释放相关系统资源系统资源 nvoid void fl
16、ushflush()/()/清空缓存,将所有缓冲清空缓存,将所有缓冲字节写入输出流字节写入输出流写入的数据通常先放写入的数据通常先放到高速缓存到高速缓存(cache)里,里,等达到某一数量时,等达到某一数量时,调用该方法将强迫数调用该方法将强迫数据写到预期目标据写到预期目标OutputStreamOutputStream类层次类层次类层次类层次OutputStreamFileOutputStreamObjectOutputStreamFilterOutputStreamByteArrayOutputStreamDataOutputStreamBufferedOutputStreamPrintS
17、treamPipedOutputStream【例例9-3】OutputStream类的使用类的使用import java.io.OutputStream;import java.io.*;public class OutputStreamUse public OutputStreamUse(OutputStream out)String s=慈母手中线,游子身上衣。临行密密缝,意恐迟迟归。慈母手中线,游子身上衣。临行密密缝,意恐迟迟归。谁言寸草心,报得三春晖。谁言寸草心,报得三春晖。;byte b=s.getBytes();try out.write(b);/将字节数组将字节数组b写出写出 o
18、ut.flush();/将把缓存中所有内容强制输出将把缓存中所有内容强制输出 catch(IOException e)System.err.println(e);e.printStackTrace();public static void main(String args)new OutputStreamUse(System.out);FileOutputStreamu文件输出流文件输出流FileOutputStream类是类是OutputStream类的子类,用于向文件写类的子类,用于向文件写入数据入数据uFileOutputStream将数据写入文件的步将数据写入文件的步骤:骤:n实例化对
19、象,获取相关文件资源。实例化对象,获取相关文件资源。n通过通过FileOutputStream类的类的write()方法把数据写入到文件中;通过方法把数据写入到文件中;通过flush()方法强制输出方法强制输出n调用调用close()方法,关闭文件,释放系方法,关闭文件,释放系统资源统资源【例例9-4】FileOutputStream类的使用类的使用import java.io.FileOutputStream;import java.io.*;public class FileOutputStreamUse public FileOutputStreamUse()String s=有志者事竟
20、成,破釜沉舟,百二秦关终属楚;有志者事竟成,破釜沉舟,百二秦关终属楚;苦心人天不负,卧薪苦心人天不负,卧薪尝胆,三千越甲可吞吴。尝胆,三千越甲可吞吴。;byte b=s.getBytes();try FileOutputStream f=new FileOutputStream(座右铭座右铭.txt);f.write(b);f.flush();f.close();catch(IOException e)System.err.println(e);e.printStackTrace();public static void main(String args)new FileOutputStrea
21、mUse();若文件不存在就若文件不存在就创建该文件,否创建该文件,否则覆盖原文件内则覆盖原文件内容容appendappend为为truetrue时,使用时,使用FileOutputStream(StringFileOutputStream(String name,booleanname,boolean append)append)方法创建的实例在文本文件尾追加字符,而非覆盖方法创建的实例在文本文件尾追加字符,而非覆盖u数据字节输入流数据字节输入流DataInputStream类和类和数据字节输出流数据字节输出流DataOutputStream类类提供直接读或写基本数据类型数据的方法提供直接读
22、或写基本数据类型数据的方法 uDataInputStream能够以一种与机器无能够以一种与机器无关的方式,直接从底层字节输入流读取关的方式,直接从底层字节输入流读取Java基本类型和基本类型和Sring类型的数据,而不类型的数据,而不必关心这个数值应当是多少个字节必关心这个数值应当是多少个字节9.2.3DataInputStream和和DataOutputStreamnDataInputStream常用方法包括:常用方法包括:npublic DataInputStream(InputStream in)npublic final boolean readBoolean()npublic fin
23、al byte readByte()npublic final char readChar()npublic final double readDouble()npublic final float readFloat()npublic final int readInt()npublic final long readLong()npublic final short readShort()npublic final String readUTF()npublic void close()读入一个读入一个字符串字符串uDataOutputStream则能够直接将则能够直接将Java基本类型和
24、基本类型和String类型数据写出类型数据写出到其它的字节输出流到其它的字节输出流uDataInputStream常用方法包括:常用方法包括:npublic DataOutputStream(OutputStream out)npublic final void writeByte(int v)npublic final void writeShort(int v)npublic final void writeInt(int v)npublic final void writeLong(long v)npublic final void writeFloat(float v)npublic
25、final void writeDouble(double v)npublic final void writeChar(int v)npublic final void writeBoolean(boolean v)npublic final void writeChars(String s)npublic final int size();/返回实际写入的字节数返回实际写入的字节数npublic void flush()npublic void close()importjava.io.FileInputStream;importjava.io.FileOutputStream;impor
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IO
限制150内