第12章 输入输出系统_第1页
第12章 输入输出系统_第2页
第12章 输入输出系统_第3页
第12章 输入输出系统_第4页
第12章 输入输出系统_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第十二章第十二章 输入输出系统输入输出系统l输入输入/ /输出基础输出基础l字节流类字节流类l字符流字符流l控制台输入控制台输入/ /输出输出l序列化序列化10.1 10.1 输入输入/ /输出基础输出基础l流的概念流的概念javajava程序通过流来完成输入程序通过流来完成输入/ /输出,流是程序中输出,流是程序中各种信息的抽象。各种信息的抽象。流流通过通过javajava的的输入输入/ /输出系统输出系统与与物理设备物理设备连接。虽然连接。虽然javajava输入输入/ /输出系统与它输出系统与它们连接的物理设备不完全相同,但所有流的行为们连接的物理设备不完全相同,但所有流的行为具有相同的

2、方式。也就是相同的输入具有相同的方式。也就是相同的输入/ /输出类和输出类和方法适用于所有类型的外部设备。方法适用于所有类型的外部设备。JavaJava中流的实现是在中流的实现是在java.iojava.io包定义的类层次结包定义的类层次结构内部完成的。所以要在程序中使用流类,必须构内部完成的。所以要在程序中使用流类,必须引用引用java.iojava.io包。包。输入输入/ /输出基础输出基础输入输入/ /输出基础输出基础l字节流与字符流字节流与字符流javajava的流式输入的流式输入/ /输出是建立在输出是建立在4 4个抽象类个抽象类的基础上:的基础上:InputStreamInputS

3、tream、OutputStreamOutputStream、ReaderReader、WriterWriter。这这4 4个个抽象类定义了所有流类的基础通用功能。抽象类定义了所有流类的基础通用功能。InputStreamInputStream和和OutputStreamOutputStream设计成设计成字节流处理字节字节流处理字节或二进制对象或二进制对象。ReaderReader和和WriterWriter为为字符流设计处理字符或字符串字符流设计处理字符或字符串。l字节流类字节流类字 节 流 由 两 个 类 层 次 结 构 定 义 , 抽 象 类字 节 流 由 两 个 类 层 次 结 构

4、定 义 , 抽 象 类InputStreamInputStream和和OutputStreamOutputStream为最顶层类,其中为最顶层类,其中每个类又有多个具体的子类,用来对不同的外每个类又有多个具体的子类,用来对不同的外设进行处理,比如磁盘文件、网络连接、内存设进行处理,比如磁盘文件、网络连接、内存缓存区等。缓存区等。字节流类主要用来处理字节、整数和其他简单字节流类主要用来处理字节、整数和其他简单的数据类型。传送数据的单位为的数据类型。传送数据的单位为字节字节(8bit)(8bit)。输入输入/ /输出基础输出基础输入输入/ /输出基础输出基础l继承自继承自InputStreamIn

5、putStream的流都是用于向程序中输入的流都是用于向程序中输入数据。数据。InputStreamStringBufferInputStreamFileInputStreamByteArrayInputStreamFilterInputStreamObjectInputStreamPipedInputStreamSequenceInputStreamLineNumberInputStreamDataInputStreamBufferedInputStreamPushbackInputStream输入输入/ /输出基础输出基础l继承自继承自OutputStreamOutputStream的流都

6、是用于从程序中向的流都是用于从程序中向外输出数据。外输出数据。PrintStreamDataOutputStreamBufferedOutputStreamOutputStreamFileOutputStreamByteArrayOutputStreamFilterOutputStreamObjectOutputStreamPipedOutputStreaml字符流类字符流类字符流类由两个类层次结构定义,抽象类字符流类由两个类层次结构定义,抽象类ReaderReader和和WriterWriter为最顶层类,它们处理为最顶层类,它们处理UnicodeUnicode的字符流。其中每个类又有多个具

7、体的子类。的字符流。其中每个类又有多个具体的子类。JavaJava中的字符是中的字符是UnicodeUnicode编码,是编码,是双字节双字节的,的,JavaJava提供了提供了直接直接对对字符文本字符文本进行处理的字符流进行处理的字符流类。类。输入输入/ /输出基础输出基础l继承自继承自ReaderReader的流都是用于向程序中输入数据,的流都是用于向程序中输入数据,且数据的单位为字符且数据的单位为字符(16bit)(16bit)。输入输入/ /输出基础输出基础l继承自继承自WriterWriter的流都是用于从程序中向外输出数的流都是用于从程序中向外输出数据,且数据的单位为字符据,且数据

8、的单位为字符(16bit)(16bit)。输入输入/ /输出基础输出基础字节流类字节流类lInputStreamInputStream( (输入流输入流) )InputStreamInputStream类是所有顺序字节输入流的父类,类是所有顺序字节输入流的父类,提供了输入处理的基本方法,提供了输入处理的基本方法,InputStreamInputStream类是类是抽象类,不能直接实例化对象,要通过继承它的抽象类,不能直接实例化对象,要通过继承它的子类来完成具体的操作。子类中一般重写了它的子类来完成具体的操作。子类中一般重写了它的方法,以适应特殊的需要。方法,以适应特殊的需要。方 法描 述int

9、int read() read()如果流中下一个字节可读就返回如果流中下一个字节可读就返回02550255之间之间的一个整型,遇到文件尾就返回的一个整型,遇到文件尾就返回-1-1,此方,此方法是抽象的,必须在子类中实现。法是抽象的,必须在子类中实现。intint read(byte b) read(byte b)从输入流中读取从输入流中读取b.lengthb.length个字节的数据,个字节的数据,写入字节数组写入字节数组b b,返回本次读取的字节,返回本次读取的字节个数个数。intint read(byte b, read(byte b, intint offset, offset, int

10、int lenlen) )从输入流中读取从输入流中读取lenlen个字节的数据,写入字个字节的数据,写入字节数组节数组b b中从下标中从下标offoff开始的位置,返回本开始的位置,返回本次读取的字节次读取的字节个数个数。字节流类字节流类如果在这些方法操作时产生错误,则这些方法将抛如果在这些方法操作时产生错误,则这些方法将抛出一个出一个IOExceptionIOException。方 法描 述intint available() available()返回当前输入流中可读的字节数返回当前输入流中可读的字节数void void mark(intmark(int readlimitreadlimi

11、t) )在输入流当前读取位置作标记,从该在输入流当前读取位置作标记,从该位置开始读取位置开始读取readlimitreadlimit个字节数据个字节数据后,标记失效后,标记失效void reset()void reset()将输入流中读取位置重置到刚调用将输入流中读取位置重置到刚调用mark()mark()方法所标记的位置方法所标记的位置long long skip(longskip(long n) n)当前读取位置向后跳过当前读取位置向后跳过n n个字节,并个字节,并返回实际跳过的字节数返回实际跳过的字节数void close()void close()关闭输入流并释放系统资源,关闭后关闭输

12、入流并释放系统资源,关闭后再进行读取操作会产生再进行读取操作会产生IOExceptionIOException异常异常字节流类字节流类lOutputStreamOutputStream(输出流)输出流) OutputStreamOutputStream类是所有顺序字节输出流的父类是所有顺序字节输出流的父类 , 提 供 了 输 入 处 理 的 基 本 方 法 ,类 , 提 供 了 输 入 处 理 的 基 本 方 法 , OutputStreamOutputStream类是抽象类,不能直接实例化类是抽象类,不能直接实例化对象,要通过继承它的子类来完成具体的操对象,要通过继承它的子类来完成具体的操作

13、。子类中一般重写了它的方法,以适应特作。子类中一般重写了它的方法,以适应特殊的需要。殊的需要。字节流类字节流类方方 法法描 述void void write(intwrite(int b) b)向输出流写入单个字节向输出流写入单个字节b bvoid write(byte b void write(byte b )将字节数组将字节数组b b中的数据写入输出流中的数据写入输出流void write(byte void write(byte b , b , intint off, off, intint lenlen) )将字节数组将字节数组b b中从下标中从下标offoff开始的长开始的长度为度为

14、lenlen个字节的数据写入输出流个字节的数据写入输出流void flush()void flush()清空输出流,并输出所有被缓冲的清空输出流,并输出所有被缓冲的字节。字节。void close()void close()关闭输出流并释放系统资源,关闭关闭输出流并释放系统资源,关闭后进行写操作将会产生后进行写操作将会产生IOExceptionIOException异常异常字节流类字节流类lFileInputStreamFileInputStream( (文件输入流文件输入流) ) FileInputStreamFileInputStream类创建一个能从文件中读取字节的类创建一个能从文件中读

15、取字节的InputStreamInputStream类,它有两个常用的构造方法:类,它有两个常用的构造方法:FileInputStream(StringFileInputStream(String name) name) throws throws FileNotFoundExceptionFileNotFoundException; ;F i l e I n p u t S t r e a m ( F i l eF i l e I n p u t S t r e a m ( F i l e f i l e ) f i l e ) t h r o w s t h r o w s FileNot

16、FoundExceptionFileNotFoundException; ; 下面的例子分别使用两种构造函数创建了使用相同磁下面的例子分别使用两种构造函数创建了使用相同磁盘文件的盘文件的FileInputStreamFileInputStream对象:对象: F i l e I n p u t S t r e a mF i l e I n p u t S t r e a m f 0 = n e w f 0 = n e w FileInputStream(“/myinfo.txtFileInputStream(“/myinfo.txt”);”); File f=new File(“/File f

17、=new File(“/myinfo.txtmyinfo.txt”);”); FileInputStreamFileInputStream f1=new f1=new FileInputStream(fFileInputStream(f);); 例:TestFileInputStream.java字节流类字节流类lFileOutputStreamFileOutputStream( (文件输出流文件输出流) ) FileOutputStreamFileOutputStream类创建一个可以向文件中写入字节类创建一个可以向文件中写入字节的的OutputStreamOutputStream类,它有类

18、,它有3 3个构造方法:个构造方法: 方 法描 述FileOutputStream(StringFileOutputStream(String name) name) throws throws FileNotFoundExceptionFileNotFoundException创建一个向具有指定名称的文件中创建一个向具有指定名称的文件中写入数据的输出文件流,写入内容写入数据的输出文件流,写入内容将覆盖原来文件内容。将覆盖原来文件内容。 FileOutputStream(StringFileOutputStream(String filepathfilepath, , booleanboole

19、an append) append) throws throws FileNotFoundExceptionFileNotFoundException 创建一个向具有指定名称的文件中创建一个向具有指定名称的文件中写入数据的输出文件流,数据将附写入数据的输出文件流,数据将附在现有文件的末尾。在现有文件的末尾。 FileOutputStream(FileFileOutputStream(File file) file) throws throws FileNotFoundExceptionFileNotFoundException创建一个向指定创建一个向指定FileFile对象表示的文对象表示的文

20、件中写入数据的文件输出流。件中写入数据的文件输出流。 字节流类字节流类lFileOutputStreamFileOutputStream( (文件输出流文件输出流) )FileOutputStreamFileOutputStream类的对象的创建不依赖于类的对象的创建不依赖于文 件 是 否 存 在 , 如 果 不 存 在 ,文 件 是 否 存 在 , 如 果 不 存 在 , FileOutputStreamFileOutputStream会在打开输出文件之前创会在打开输出文件之前创建它。建它。如果该文件存在,但它是一个目录,而不是如果该文件存在,但它是一个目录,而不是一个常规文件;或者该文件不

21、存在,但无法一个常规文件;或者该文件不存在,但无法创建它;抑或因为其他某些原因而无法打开创建它;抑或因为其他某些原因而无法打开它,则抛出它,则抛出 FileNotFoundException FileNotFoundException。例:例:TestFileOutputStream.javaTestFileOutputStream.java字节流类字节流类lRandomAccessFileRandomAccessFile ( (随机访问文件类随机访问文件类) )RandomAccessFileRandomAccessFile类提供了随机读写文件的类提供了随机读写文件的功能,可以从一条记录随意

22、跳转到另一条记功能,可以从一条记录随意跳转到另一条记录,进行读取或修改。录,进行读取或修改。R a n d o m A c c e s s S t r e a mR a n d o m A c c e s s S t r e a m 不 是 派 生 于不 是 派 生 于InputStreamInputStream和和OutputStreamOutputStream,而是实现定义而是实现定义了基本输入了基本输入/ /输出方法的输出方法的DataInputDataInput和和DataOutputDataOutput接口。接口。字节流类字节流类字节流类字节流类lRandomAccessFileRa

23、ndomAccessFile ( (随机访问文件类随机访问文件类) )RandomAccessFileRandomAccessFile有两种构造函数,形式分有两种构造函数,形式分别如下别如下:RandomAccessFile(FileRandomAccessFile(File file,Stringfile,String mode) mode) throws throws FileNotFoundExceptionFileNotFoundException; ;RandomAccessFile(StringRandomAccessFile(String name,Stringname,Stri

24、ng mode) mode) thowsthows FileNotFoundExceptionFileNotFoundException; ;modemode指定文件读写模式,指定文件读写模式,“r”r”代表文件可读不代表文件可读不可写,可写,“rwrw”代表文件以读写方式打开。代表文件以读写方式打开。字节流类字节流类lRandomAccessFileRandomAccessFile ( (随机访问文件类随机访问文件类) )读取数据的方法读取数据的方法booleanboolean readBooleanreadBoolean()()从该文件的当前文件指针开从该文件的当前文件指针开始读取单个字节

25、始读取单个字节intint readIntreadInt()()从该文件的当前文件指针开从该文件的当前文件指针开始读取始读取 4 4 个字节个字节String String readLinereadLine()()从此文件读取文本的下一行从此文件读取文本的下一行 void void readFully(bytereadFully(byte b) b)将将 b.lengthb.length 个字节从此文个字节从此文件读入字节数组件读入字节数组字节流类字节流类lRandomAccessFileRandomAccessFile ( (随机访问文件类随机访问文件类) )写数据的方法写数据的方法void

26、 void writeBooleanwriteBoolean()() 按单字节值将按单字节值将 booleanboolean 写入写入该文件该文件void void writeIntwriteInt()()按四个字节将按四个字节将 intint 写入该文写入该文件件void void writeCharwriteChar()()按双字节值将按双字节值将 char char 写入该写入该文件文件void void writeDoublewriteDouble()()按八字节数量将该按八字节数量将该 double double 值写入该文件值写入该文件字节流类字节流类lRandomAccessFi

27、leRandomAccessFile ( (随机访问文件类随机访问文件类) )控制文件指针的方法控制文件指针的方法例:例:TestRandomAccessFile.javaTestRandomAccessFile.javalong long getFilePointergetFilePointer()() throws throws IOExceptionIOException得到当前的文件读取指针得到当前的文件读取指针void void seek(longseek(long pos) pos)移动文件读取指针到指定位置移动文件读取指针到指定位置intint skipBytes(intskip

28、Bytes(int n) n)将文件读取指针向后跳过将文件读取指针向后跳过n n个字个字节,返回实际跳过的字节数节,返回实际跳过的字节数l过滤流过滤流过滤流是对提供扩展功能的输入过滤流是对提供扩展功能的输入/ /输出流。输出流。过滤流的作用:过滤流的作用:在在读读/ /写数据写数据的同时可以对数据进行的同时可以对数据进行处理处理:l数据的缓冲数据的缓冲 行的计数行的计数l直接读写直接读写JavaJava的基本数据类型,如的基本数据类型,如booleanboolean、intint、doubledouble等格式的数据等格式的数据使用时,过滤流必须连接到输入使用时,过滤流必须连接到输入/ /输出

29、流上,例如:输出流上,例如:F i l e I n p u t S t r e a mF i l e I n p u t S t r e a m f i sf i s = n e w = n e w FileInputStream(“Test.txtFileInputStream(“Test.txt”);”);B u f f e r e d I n p u t S t r e a mB u f f e r e d I n p u t S t r e a m b i sb i s = n e w = n e w BufferedInputStream(fisBufferedInputStream

30、(fis););过 滤 字 节 流 为过 滤 字 节 流 为 F i l t e r I n p u t S t r e a mF i l t e r I n p u t S t r e a m 和和FilterOutputStreamFilterOutputStream两个抽象类及其子类。两个抽象类及其子类。字节流类字节流类l过滤字节流过滤字节流从类结构图可知,继承从类结构图可知,继承FilterInputStreamFilterInputStream类类的类有:的类有:lBufferedInputStreamBufferedInputStreamlDataInputStreamDataIn

31、putStreamlLineNumberInputStreamLineNumberInputStreamlPushbackInputStreamPushbackInputStream从类结构图可知,继承从类结构图可知,继承FilterOutputStreamFilterOutputStream类的类有:类的类有:lBufferedOutputStreamBufferedOutputStreamlDataOutputStreamDataOutputStreamlPrintStreamPrintStream字节流类字节流类l缓冲字节流缓冲字节流BufferedInputStreamBuffered

32、InputStream和和BufferedOutputStreamBufferedOutputStream是一种带缓冲的过滤流,对读写的数据提供了是一种带缓冲的过滤流,对读写的数据提供了缓冲的功能。缓冲的功能。10.2 10.2 字节流类字节流类l缓冲字节流缓冲字节流BufferedInputStreamBufferedInputStreaml通过通过BufferedInputStreamBufferedInputStream读取数据时,第一次读读取数据时,第一次读取时数据按块读入缓冲区,此后如果有读操作,刚取时数据按块读入缓冲区,此后如果有读操作,刚直接访问缓冲区。直接访问缓冲区。l支持支持

33、mark()mark()、reset()reset()、skip()skip()等方法。等方法。BufferedOutputStreamBufferedOutputStreaml通过通过BufferedOutputStreamBufferedOutputStream写数据时,先将缓冲写数据时,先将缓冲区写满,才一次写入区写满,才一次写入BufferedOutputStreamBufferedOutputStream 所连所连接的输出流。接的输出流。lflush()flush()方法将缓冲区的数据强制全部写入输出流方法将缓冲区的数据强制全部写入输出流例:例:BufferedInOut.javaB

34、ufferedInOut.java字节流类字节流类l数据流数据流( (DataInputStreamDataInputStream和和DataOutputStreamDataOutputStream) )DataInputStreamDataInputStream和和DataOutputStreamDataOutputStream分别直分别直接 继 承 自接 继 承 自 F i l t e r I n p u t S t r e a mF i l t e r I n p u t S t r e a m 和和FilterOutputSteamFilterOutputSteam,这两个类的对象属于

35、,这两个类的对象属于过滤过滤流流,使用时,需要分别连接在基本的输入,使用时,需要分别连接在基本的输入/ /输出输出流上。流上。DataInputStreamDataInputStream和和DataOutputStreamDataOutputStream分别分别实实现了现了DataInputDataInput和和DataOutputDataOutput接口接口。不但支持不但支持InputStreamInputStream和和OutputStreamOutputStream中定义的方法,还中定义的方法,还可以可以直接读写直接读写JavaJava中的各种内置数据类型中的各种内置数据类型boolea

36、nboolean、intint、doubledouble等等。字节流类字节流类l数据流数据流( (DataInputStreamDataInputStream和和DataOutputStreamDataOutputStream) )DataInputStreamDataInputStream和和DataOutputStreamDataOutputStream的构造方法:的构造方法:lDataInputStream(InputStreamDataInputStream(InputStream in) in)lDataOutputStream(OutputStreamDataOutputStrea

37、m(OutputStream out) out)字节流类字节流类DataInputStreamDataInputStream方法:方法:lreadDoublereadDouble()()lreadIntreadInt()()lreadBooleanreadBoolean()()例:例:DataInOut.javaDataInOut.javaDataOutputStreamDataOutputStream方法:方法: writeDouble(doublewriteDouble(double d) d)writeInt(intwriteInt(int i) i)writeBoolean(boole

38、anwriteBoolean(boolean b)b)字符流字符流lReaderReader Reader Reader是定义是定义javajava的的字符输入流字符输入流的抽象类,该类的所的抽象类,该类的所有方法在出错的情况下都将引发有方法在出错的情况下都将引发IOExceptionIOException异常。异常。方方 法法描 述intint read() read()读取输入流的下一个字符返回一个整型数,读取输入流的下一个字符返回一个整型数,如果已到文件结尾则返回如果已到文件结尾则返回-1-1intint read(char read(char buffer)buffer)读取读取buf

39、fer.lengthbuffer.length个字符到字符数组,返个字符到字符数组,返回实际成功读取的回实际成功读取的字符个数字符个数,如果已到文件,如果已到文件结尾则返回结尾则返回-1-1intint read(char read(char buffer, buffer, intint offset, offset, intint numCharsnumChars) )读取读取numCharsnumChars个字符到以个字符到以bufferoffsetbufferoffset 开始的字符数组中,返回实际成功读取的开始的字符数组中,返回实际成功读取的字字符个数符个数,如果已到文件结尾则返回,如

40、果已到文件结尾则返回-1-1方方 法法描 述booleanboolean markSupportedmarkSupported()()若该流支持若该流支持mark()/reset()mark()/reset()则返回则返回truetruevoid void mark(intmark(int numCharsnumChars) )在输入流的当前位置设置一个标志,该在输入流的当前位置设置一个标志,该输入流在输入流在numCharsnumChars个字符被读取前有效个字符被读取前有效void reset()void reset()设置输入指针到先前设置的标志处设置输入指针到先前设置的标志处boole

41、anboolean ready() ready()若下一个输入请求不等待则返回若下一个输入请求不等待则返回truetrue,否则返回否则返回falsefalselong skip(long long skip(long numCharsnumChars) )跳过跳过numCharsnumChars个字符,并返回所跳过的个字符,并返回所跳过的字符数字符数void close()void close()关闭输入流,关闭后进行读取输入流操关闭输入流,关闭后进行读取输入流操作会引发作会引发IOExceptionIOException异常异常字符流字符流lWriterWriter Writer Writ

42、er是定义是定义javajava的字符输出流的抽象类,该类的的字符输出流的抽象类,该类的所有方法都返回一个所有方法都返回一个voidvoid值,并在出错的情况下都将值,并在出错的情况下都将引发引发IOExceptionIOException异常。异常。方方 法法描 述void void write(intwrite(int chch) )向输出流写单个字符向输出流写单个字符void write(char buffer)void write(char buffer)向输出流写一个字符数组向输出流写一个字符数组bufferbuffervoid write(char buffer, void wri

43、te(char buffer, intint offset, offset, intint numCharsnumChars) )向输出流写一个从向输出流写一个从bufferoffsetbufferoffset开开始的始的numCharsnumChars个字符的个字符的bufferbuffer数组数组void write(String void write(String strstr) )向输出流写一个字符串向输出流写一个字符串void write(String void write(String strstr, , intint offset, offset, intint numChars

44、numChars) )向输出流写一个字符串中以向输出流写一个字符串中以offsetoffset为为起点的起点的numCharsnumChars 个字符个字符void flush()void flush()清除缓冲区,即刷新输出缓冲清除缓冲区,即刷新输出缓冲void close()void close()关闭输出流关闭输出流字符流字符流字符流字符流l转换流转换流( (InputStreamReaderInputStreamReader和和OutputStreamWriterOutputStreamWriter) )字符流是建立在字节流之上的,字符流是建立在字节流之上的,转换流可将一个转换流可将一

45、个字字节流节流按照按照某种编码规范某种编码规范转换成转换成字符流字符流。InputStreamReaderInputStreamReader的构造方法的构造方法public public InputStreamReader(InputStreamInputStreamReader(InputStream in) in)使用当前平台的默认编码规范,将字节输入流使用当前平台的默认编码规范,将字节输入流inin转换成一转换成一个字符输入流个字符输入流public public InputStreamReader(InputStreamInputStreamReader(InputStream in,

46、 String enc) in, String enc)使用指定的编码规范,将字节输入流使用指定的编码规范,将字节输入流inin转换成一个字符输转换成一个字符输入流入流例如:例如:InputStreamReaderInputStreamReader isrisr = new = new InputStreamreaderInputStreamreader (System.in,”ISO8859_1”)(System.in,”ISO8859_1”)字符流字符流l转换流转换流( (InputStreamReaderInputStreamReader和和OutputStreamWriterOutpu

47、tStreamWriter) )OutputStreamReaderOutputStreamReader的构造方法的构造方法例:例:TestTransform.javaTestTransform.javapublic public OutputStreamReader(OutputStreamOutputStreamReader(OutputStream out) out)使用当前平台的默认编码规范,将字节输出流使用当前平台的默认编码规范,将字节输出流outout转换转换成一个字符输出流成一个字符输出流public public OutputStreamReader(OutputStreamO

48、utputStreamReader(OutputStream out, out, String enc)String enc)使用指定的编码规范,将字节输出流使用指定的编码规范,将字节输出流outout转换成一个字转换成一个字符输出流符输出流lFileReaderFileReaderFileReaderFileReader是是ReaderReader类的子类,它用来读取类的子类,它用来读取文件的内容。文件的内容。常用的构造方法为:常用的构造方法为: FileReader(StringFileReader(String fileNamefileName) throws ) throws File

49、NotFoundExceptionFileNotFoundException FileReader(FileFileReader(File file) throws file) throws FileNotFoundExceptionFileNotFoundException例:例:TestFileReader.javaTestFileReader.java字符流字符流lFileWriterFileWriterFileWriterFileWriter类是类是WriterWriter的子类,它用来向文件写内容。的子类,它用来向文件写内容。常用的构造方法为常用的构造方法为:F i l e W r

50、i t e r ( S t r i n gF i l e W r i t e r ( S t r i n g f i l e N a m ef i l e N a m e ) t h r o w s ) t h r o w s FileNotFoundExceptionFileNotFoundExceptionFileWriter(StringFileWriter(String fileName,booleanfileName,boolean append) throws append) throws FileNotFoundExceptionFileNotFoundExceptionF i

51、l e W r i t e r ( F i l eF i l e W r i t e r ( F i l e f i l e ) t h r o w s f i l e ) t h r o w s FileNotFoundExceptionFileNotFoundException FileWriterFileWriter对象的创建不依赖于文件是否存在,如果文对象的创建不依赖于文件是否存在,如果文件不存在,件不存在,FileWriterFileWriter会在打开输出文件之前创建它。会在打开输出文件之前创建它。如果如果FileWriterFileWriter试图打开一个只读文件,则会引发试图打

52、开一个只读文件,则会引发IOExceptionIOException异常。异常。例:例:TestFileWriter.TestFileWriter.j javaava字符流字符流lBufferedReaderBufferedReaderBufferedReaderBufferedReader类是类是ReaderReader类的子类,它通过缓冲输类的子类,它通过缓冲输入来提高程序的性能。入来提高程序的性能。常用的构造方法有:常用的构造方法有:其它方法:其它方法:public public String String readLinereadLine()() throws throws IOExc

53、eptionIOException读取一个文本行,以换行读取一个文本行,以换行nn或回车或回车rr表示表示一行结束一行结束例:例:TestBufferReader.javaTestBufferReader.java字符流字符流BufferedReader(ReaderBufferedReader(Reader in) in)创建一个默认缓冲区长度的缓冲字符输入流创建一个默认缓冲区长度的缓冲字符输入流BufferedReader(ReaderBufferedReader(Reader inputStreaminputStream, , intint bufSizebufSize) )创建一个指定

54、缓冲区长度的缓冲字符输入流创建一个指定缓冲区长度的缓冲字符输入流lBufferedWriterBufferedWriterBufferedWriterBufferedWriter类是类是WriterWriter类的子类,与类的子类,与WriterWriter相相比它实现了方法比它实现了方法 flush()flush()。 用用BufferedWriterBufferedWriter可以通过减少数据被实际写到输可以通过减少数据被实际写到输出流的次数而提高程序性能。出流的次数而提高程序性能。常用的构造方法有:常用的构造方法有: 字符流字符流BufferedWriter(WriterBuffered

55、Writer(Writer outputStreamoutputStream) )创建一个默认缓冲区长度的缓冲字符输出流创建一个默认缓冲区长度的缓冲字符输出流BufferedWriter(WriterBufferedWriter(Writer outputStream,intoutputStream,int bufSizebufSize) )创建一个指定缓冲区长度的缓冲字符输出流创建一个指定缓冲区长度的缓冲字符输出流控制台输入控制台输入/ /输出输出 控制台输入控制台输入/ /输出是用户与程序之间输出是用户与程序之间交互交互的最常见方式。的最常见方式。l读取控制台输入读取控制台输入JavaJa

56、va的控制台输入由从的控制台输入由从System.inSystem.in读取数据来完成,读取数据来完成,System.inSystem.in是标准输入流是标准输入流,默认设备是,默认设备是键盘键盘。通常要用到通常要用到BufferedReaderBufferedReader和和InputStreamReaderInputStreamReader流。流。用下面的语句可以将用下面的语句可以将System.inSystem.in包装到流对象中:包装到流对象中: BufferedReaderBufferedReader brbr=new =new BufferedReaderBufferedReade

57、r(new (new InputStreamReader(System.inInputStreamReader(System.in);); brbr是通过是通过System.inSystem.in生成的连接控制台的字符流。生成的连接控制台的字符流。System.inSystem.in是是InputStreamInputStream类型的一个类型的一个对象对象,它可以自,它可以自动访问动访问InputStreamInputStream定义的定义的read()read()方法,从方法,从键盘键盘读取读取一个或多个字符。一个或多个字符。 例:例:SystemInDemo.javaSystemInDe

58、mo.java控制台输入控制台输入/ /输出输出l向控制台写输出向控制台写输出System.outSystem.out是标准输出流是标准输出流,默认设备是控制,默认设备是控制台。台。因 为因 为 S y s t e m . o u tS y s t e m . o u t 引 用 的 对 象 类 型 为引 用 的 对 象 类 型 为PrintStreamPrintStream,所以所以System.outSystem.out实际是一个实际是一个字字节流节流。控制台输出由控制台输出由print()print()和和printlnprintln()()方法实现方法实现是最简单。是最简单。控制台输入

59、控制台输入/ /输出输出lprintprint流流PrintStreamPrintStream是是OutputStreamOutputStream的子类,同样实现了的子类,同样实现了write()write()方法,因此可以用方法,因此可以用System.out.writeSystem.out.write()()来向来向控制台写输出。控制台写输出。PrintStreamPrintStream打印的所有字符都使用平台的默认字符打印的所有字符都使用平台的默认字符编码转换为编码转换为字节字节。在需要写入。在需要写入字符字符而不是写入字节而不是写入字节的情况下,应该使用的情况下,应该使用 PrintW

60、riterPrintWriter类(主要对以字类(主要对以字符为单位的文本文件进行写操作)。符为单位的文本文件进行写操作)。例:例:TestPrintStream.javaTestPrintStream.java TestPrintWriter.javaTestPrintWriter.javaFileFile类类lFileFile类是描述类是描述文件和目录路径名文件和目录路径名的类。的类。FileFile以以平台无关平台无关的方式描述一个文件或目录对象的属性。的方式描述一个文件或目录对象的属性。 FileFile类的构造方法:类的构造方法:FileFile的静态属性的静态属性String se

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论