第9章IO流与.ppt

上传人:s****8 文档编号:66866370 上传时间:2022-12-21 格式:PPT 页数:69 大小:907KB
返回 下载 相关 举报
第9章IO流与.ppt_第1页
第1页 / 共69页
第9章IO流与.ppt_第2页
第2页 / 共69页
点击查看更多>>
资源描述

《第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

26、tjava.io.DataInputStream;importjava.io.DataOutputStream;publicclassDataStreamUsepublicDataStreamUse()tryFileOutputStreamfout=newFileOutputStream(out.txt);DataOutputStreamdfout=newDataOutputStream(fout);for(inti=0;i6;i+)dfout.writeInt(i);dfout.close();FileInputStreamfin=newFileInputStream(out.txt);Da

27、taInputStreamdfin=newDataInputStream(fin);for(inti=0;i6;i+)System.out.print(dfin.readInt()+,);dfin.close();catch(Exceptione)System.err.println(e);e.printStackTrace();publicstaticvoidmain(Stringargs)newDataStreamUse();【例例9-5】数据字节流的使用数据字节流的使用从一个流产生另从一个流产生另一个流一个流9.2.4ObjectInputStream和和ObjectOutputStre

28、amu类类ObjectOutputStream和和ObjectInputStream分别继承了接口分别继承了接口ObjectOutput和和ObjectInput,将数据,将数据流功能扩展到可以流功能扩展到可以读写对象读写对象uObjectInputStream类和类和ObjectOutputStream类创建的对象被称类创建的对象被称为为对象输入流和对象输出流对象输入流和对象输出流n对象输出流使用对象输出流使用writeObject(Object obj)方法将方法将一个对象一个对象obj写入输出流,写入输出流,将将对象状态保存对象状态保存下来下来(将对将对象保存到文件中,或者通过网络传送到

29、其他地方象保存到文件中,或者通过网络传送到其他地方)n对象输入流使用对象输入流使用readObject()从源中读取一个对象从源中读取一个对象到程序中,到程序中,将将对象状态恢复对象状态恢复uJava允许允许可序列化的对象可序列化的对象通过对象流进行通过对象流进行传输传输u只有实现只有实现Serializable接口接口的类才能被序的类才能被序列化;列化;Serializable接口中接口中没有任何方法没有任何方法,当一个类声明实现当一个类声明实现Serializable接口时,接口时,只是表明该类只是表明该类加入对象序列化协议加入对象序列化协议u一个类如果实现了一个类如果实现了Seriali

30、zable接口,那接口,那么这个类创建的对象就是所谓么这个类创建的对象就是所谓可序列化的可序列化的对象对象u实际上,类实际上,类ObjectOutputStream和和ObjectInputStream分别实现了对象分别实现了对象的的序列化序列化和和反序列化反序列化功能功能恢复对象状态恢复对象状态保存对象状态保存对象状态u 序列化序列化只能只能保存保存对象的对象的非静态成员变量非静态成员变量(且保存的(且保存的只是只是变量的变量的值),值),而而不能不能保存任何保存任何成员方法成员方法和和静态静态成员变量成员变量u 某些某些对象的状态是对象的状态是瞬时瞬时的,的,无法保存无法保存,如,如Thr

31、ead对对象象或或流对象流对象。对于这样的成员变量,必须用。对于这样的成员变量,必须用transient关键字标明。任何用关键字标明。任何用transient关键字声关键字声明的成员变量都不会被保存明的成员变量都不会被保存u序列序列化可能将对象存放到磁盘上或在网络上发送,化可能将对象存放到磁盘上或在网络上发送,会产生会产生安全问题安全问题。需要。需要保密保密的数据不应保存在永久的数据不应保存在永久介质中(或不应简单地不加处理地保存下来)。为介质中(或不应简单地不加处理地保存下来)。为保证安全,应在这些变量前加上保证安全,应在这些变量前加上transient关键字关键字u有时我们想得到对象的一个

32、有时我们想得到对象的一个“复制品复制品”,该,该复制品的实体是原对象实体的拷贝。复制复制品的实体是原对象实体的拷贝。复制品实体的变化不会引起原对象实体发生变品实体的变化不会引起原对象实体发生变化,这样的复制品称为原对象的化,这样的复制品称为原对象的克隆对象克隆对象或简称或简称克隆克隆。u使用对象流很容易得获取一个序列化对象的使用对象流很容易得获取一个序列化对象的克隆。我们只需将该对象写入到对象输出克隆。我们只需将该对象写入到对象输出流,那么用对象输入流读回的对象一定是流,那么用对象输入流读回的对象一定是原对象的一个克隆原对象的一个克隆 9.2.5BufferedInputStream和和Buf

33、feredOutputStreamu类类BufferedInputStream和类和类BufferedOutputStream是带缓存的输入流是带缓存的输入流和输出流,即缓冲流和输出流,即缓冲流u在实例化类在实例化类BufferedInputStream和类和类BufferedOutputStream对象时,会在内存对象时,会在内存中开辟一个字节数组用来存放数据流中的数据中开辟一个字节数组用来存放数据流中的数据u借助字节数组,在读取或者存储数据时可以以字借助字节数组,在读取或者存储数据时可以以字节数组为单位把数据读入内存,或以字节数组为节数组为单位把数据读入内存,或以字节数组为单位把数据写入指

34、定的文件中,从而大大提高数单位把数据写入指定的文件中,从而大大提高数据的读据的读/写效率写效率 u类类BufferedInputStream的构造方法:的构造方法:BufferedInputStream(InputStreamin)n其中其中in是指定的输入流,通常是是指定的输入流,通常是FileInputStream的实例对象。的实例对象。BufferedInputStream(InputStreamin,intsize)n其中,其中,in同前,同前,size是大于是大于0的数,用于的数,用于指定缓存大小指定缓存大小 u与类与类BufferedOutputStream的构造方的构造方法类似法

35、类似 从一个流构造另一个流从一个流构造另一个流u从底层流构造高级流时就会创建流链从底层流构造高级流时就会创建流链FileInputStreamf=newFileInputStream(“file.dat);BufferedInputStreamb=newBufferedInputStream(f);DataInputStreamd=newDataInputStream(b);【例例9-8】缓存流的使用缓存流的使用import java.io.FileInputStream;import java.io.BufferedInputStream;import java.util.Date;publ

36、ic class BufferedStreamUse private static String fileName=毕业那年我们二十三岁毕业那年我们二十三岁.txt;public BufferedStreamUse()try int i=0;int ch;Date d1=new Date();/创建获取当前时间的对象创建获取当前时间的对象 FileInputStream f=new FileInputStream(fileName);while(ch=f.read()!=-1)i+;f.close();Date d2=new Date();long t=d2.getTime()-d1.getT

37、ime();System.out.printf(读取文件读取文件%s(共共%d字节字节)n,fileName,i);System.out.printf(不带缓存的方法需要不带缓存的方法需要%1$d毫秒毫秒n,t);i=0;d1=new Date();f=new FileInputStream(fileName);BufferedInputStream fb=new BufferedInputStream(f);while(ch=fb.read()!=-1)i+;fb.close();d2=new Date();t=d2.getTime()-d1.getTime();System.out.pri

38、ntf(带缓存的方法需要带缓存的方法需要%1$d毫秒毫秒n,t);catch(Exception e)System.err.println(e);e.printStackTrace();public static void main(String args)new BufferedStreamUse();9.2.6标准的输入标准的输入/输出流输出流ujava.lang包的包的System类定义了三个静态成员变量:类定义了三个静态成员变量:nstatic final InputStream in/标准输入标准输入innstatic final PrintStream out/标准输出标准输出ou

39、tnstatic final PrintStream err/标准错误输出标准错误输出erruin可以直接调用可以直接调用InputStream类提供的输入方法;类提供的输入方法;out和和err可以直接调用可以直接调用PrintStream类提供的输出方法类提供的输出方法uout用于屏幕输出,常用方法有:用于屏幕输出,常用方法有:nSystem.out.print(String str);/向向屏幕屏幕输出字符串输出字符串strnSystem.out.println(String str);/向向屏幕屏幕输出字符串输出字符串str后换行后换行uin用于屏幕输入,常用方法有:用于屏幕输入,常用

40、方法有:nSystem.in.read()/返回从返回从键盘键盘输入的字符输入的字符nSystem.in.read(byte b)/从从键盘键盘输入多个字符到数输入多个字符到数组组b,并返回字符个数,并返回字符个数 都可被重定向;都可被重定向;err通常不;通常不;out会被缓冲,会被缓冲,err不会不会PrintStreamu类类PrintStream是标准的输出类,在是标准的输出类,在OutputStream基础上提供了增强的功能,可基础上提供了增强的功能,可以方便地输出各种类型数据(而不仅限于以方便地输出各种类型数据(而不仅限于byte型)的格式化表示形式型)的格式化表示形式uPrint

41、Stream从不抛出从不抛出IOException类(可用类(可用checkError方法检测)方法检测)u构造方法:构造方法:npublicPrintStream(OutputStreamout);npublicPrintStream(OutputStreamout,BooleanautoFlsh);/是否自动刷新是否自动刷新3636autoFlash为为true时,采用自动刷时,采用自动刷新,当输出回车新,当输出回车换行时,缓存中换行时,缓存中的数据一般会全的数据一般会全部自动写入。部自动写入。默认不自动刷新默认不自动刷新将向其中写将向其中写入的目标流入的目标流uPrintStream常用

42、方法:常用方法:npublicvoidprint(booleanb);npublicvoidprint(charc);npublicvoidprint(longl);npublicvoidprint(inti);npublicvoidprint(floatf);npublicvoidprint(doubled);npublicvoidprint(Strings);npublicvoidprint(Objectobj);npublicvoidprintln();3737将指定数据将指定数据写入目标流写入目标流println【例例9-9】标准输入标准输入/输出流的使用输出流的使用import ja

43、va.io.IOException;public class StandardInputOutputUse /抛出异常交由抛出异常交由Java虚拟机处理虚拟机处理 public static void main(String args)throws IOException System.out.print(请从键盘上输入数据请从键盘上输入数据:);byte buffer=new byte512;int count=System.in.read(buffer);System.out.print(通过标准的输出,输出的数据通过标准的输出,输出的数据:);for(int i=0;icount;i+)

44、System.out.print(+bufferi);/按字节方式输出按字节方式输出buffer System.out.println();for(int i=0;i文本)、(文本文本)、(文本-日期)日期)SimpleDateFormatsdf=newSimpleDateFormat(yyyy-MM-ddhh:mm);File files=dir.listFiles();for(int i=0;ifiles.length;i+)System.out.print(filesi.getName()+t);/显示文件名显示文件名 if(filesi.isFile()/判断指定判断指定File对象是

45、否是文件对象是否是文件 System.out.print(filesi.length()+Bt);/显示文件长度显示文件长度 count_files+;byte_files+=filesi.length();else/是查看当前所在目录的文件和目录是查看当前所在目录的文件和目录 System.out.print(t);count_dirs+;System.out.println(sdf.format(new Date(filesi.lastModified();System.out.println(rn共有共有+count_files+个文件,总字节数为个文件,总字节数为+byte_files

46、);System.out.println(共有共有+count_dirs+个目录个目录);public static void main(String args)throws IOException new FileUse();9.4.2随机访问文件类随机访问文件类n通常,输入流只能从中读取数据,而不能向通常,输入流只能从中读取数据,而不能向其写出数据;输出流则只能向其写出数据,其写出数据;输出流则只能向其写出数据,而不能从中读取数据。但有一个特例:而不能从中读取数据。但有一个特例:nRandomAccessFile类,直接继承类,直接继承object,同时实现了接口,同时实现了接口DataI

47、nput和和DataOutputn该类创建的流的指向既可以作为源也可以作该类创建的流的指向既可以作为源也可以作为目的地,所以既可以用来处理文件的输入,为目的地,所以既可以用来处理文件的输入,又可以处理文件的输出,实现对同一个文件又可以处理文件的输出,实现对同一个文件的交替读写,并允许指定读写位置的交替读写,并允许指定读写位置字节流字节流uRandomAccessFile类将文件看作字节类将文件看作字节数组,用文件指针指示当前位置数组,用文件指针指示当前位置u新建新建RandomAccessFile类的对象后,类的对象后,文件指针指向文件头文件指针指向文件头u读取或存储数据后,文件指针指向刚读取

48、或读取或存储数据后,文件指针指向刚读取或写入的数据后写入的数据后u因为因为Java的各种基本数据类型大小固定,的各种基本数据类型大小固定,不依赖于具体的计算机或操作系统,所以可不依赖于具体的计算机或操作系统,所以可方便地计算出文件指针的当前位置和所需移方便地计算出文件指针的当前位置和所需移动到的位置动到的位置5959u构造方法:构造方法:nRandomAccessFile(Filefile,Stringmode)/file 指定流的源,同时也是流目的地;指定流的源,同时也是流目的地;mode取取r(只读)或(只读)或rw(可读写)决定流对文件的访(可读写)决定流对文件的访问权限问权限nRand

49、omAccessFile(Stringname,Stringmode)/name 指定一个文件名,给出流的源,同指定一个文件名,给出流的源,同时也是流目的地。访问模式时也是流目的地。访问模式mode取取r(只读)(只读)或或rw(可读写)决定流对文件的访问权限(可读写)决定流对文件的访问权限6060u常用方法:常用方法:nlonggetFilePointer();/获取文件指针位置获取文件指针位置(距文件头的字节数)(距文件头的字节数)nvoidseek(longpos)/设置文件指针到设置文件指针到pos处,处,pos为整数,表示字节数,为为整数,表示字节数,为0时表示移到时表示移到文件头文

50、件头intread()/读取一个字节读取一个字节nvoidwrite(intv)/写入写入v的低的低8位位nStringreadLine()/读入一行读入一行nlonglength()/返回文件长度返回文件长度nvoidclose()/关闭文件关闭文件6161nintreadInt()/读取一个整数读取一个整数nvoidwriteInt(intv)/写入一个整数写入一个整数n读写基本数据类型数据及字符串读写基本数据类型数据及字符串6262【例例9-13】随机访问文件类的使用随机访问文件类的使用importjava.io.RandomAccessFile;importjava.io.IOExce

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com