第八章输入/输出处理
输入/输出处理是程序设计中非常重要的一部分,比如从键盘读取数据、从文件中读取数据或向文件中写数据等等,而键盘、监视器、磁盘存储设备都称为输入、输出源。Java把这些不同类型的输入、输出源抽象为流(stream)。
Java程序可以用输入流从一些输入源读数据,用输出流向一些输出源写数据。
Jdk 提供了包java.io,其中包括一系列的类来实现输入/输出处理。从jdk1.1开始,java.io包中的流包括字节流和字符流。
§8.1输入/输出字节流概述
§8.1.1 I/O字节流的层次结构
在java中,所有的输入流都是从抽象类InputStream继承而来,所有的输出流都是从OutputStream 继承而来。以下给出了java语言IO包中输入/输出处理类之间的继承关系。
输入、输出字节流的类层次
一、简单的输入、输出流
1.FileInputStream和FileOutputStream:用于本地文件系统的文件读写。
2.PipedInputStream和PipedOutputStream:用于完成管道的输入和输出。管道用于将一个程序(或线程或代码块)的输出引导进另一个程序(或线程或代码块)的输入,所有PipedInputStream必须连接到一个PipedOutputStream所有PipedOutputStream必须连接到一个PipedInputStream。3.ByteArrayInputStream和ByteArrayOutputStream:读写内存数据。4.SequenceInputStream:用于将多个输入流连接到一个输出流。5.StringBufferInputStream:用于读取StringBuffer类可变字符串中的数据。
二、过滤流
1.DataInputStream和DataOutputStream:用一种与机器无关的格式读写java语言的基本数据类型。
2.BufferedInputStream和BufferedOutputStream:在读写数据的同时缓存数据,从而减少数据源的访问,提高了运行效率。
3.LineNumberInputStream:不仅可以实现读取数据操作,同时可以记录读取的行数。4.PushbackInputStream:具有一个单字节的缓冲区,利用该缓冲区可以在读取数据的同时预先取得下一个字符。
5.PringStream:提供便利的打印方法的输出流。
三、其它类
1.File:用于描述本地文件系统中的一个文件或目录。用户可以为本地文件系统中的一个文件或目录创建一个File对象。
2.FileDescriptor:用于描述本地文件系统中的一个文件或目录的句柄(或描述符)3.RandomAccessFile:用于描述一个随机存取文件。
4.StreamTokenizer:用于对一个流中的内容进行解析。一般用于对文本文件进行文法或词法分析,例如可以用它分析一个java源文件,形成变量名,操作符等等。
5.DataInput和DataOutput:这两种接口描述了能用一种与机器无关的格式读写java语言的基本数据类型的流。DataInputStream,DataOutputStream和RandomAccessFile类实现了这两个接口。6.FileNameFilter:用于文件名查模式的匹配。
§8.1.2 InputStream和OutputStream类
这两个类都是抽象类,它继承于java.lang.Object类。
1.InputStream
◇从流中读取数据:
int read( ); //读取一个字节,返回值为所读的字节
int read( byte b[ ] ); //读取多个字节,放置到字节数组b中,通常读取的字节数量为b的长度,返回值为实际读取的字节的数量
int read( byte b[ ], int off, int len ); //读取len个字节,放置到以下标off开始字节数组b中,返回值为实际读取的字节的数量
int available( ); //返回值为流中尚未读取的字节的数量
long skip( long n );//读指针跳过n个字节不读,返回值为实际跳过的字节数量
◇关闭流:
pipedinputstream
close( ); //流操作完毕后必须关闭
◇使用输入流中的标记:
void mark( int readlimit ); //记录当前读指针所在位置,readlimit表示读指针读出readlimit个字节后所标记的指针位置才失效
void reset( ); //把读指针重新指向用mark方法所记录的位置
boolean markSupported( );//当前的流是否支持读指针的记录功能
有关每个方法的使用,详见java API。
2.OutputStream
◇输出数据:
void write( int b ); //往流中写一个字节b
void write( byte b[ ] ); //往流中写一个字节数组b
void write( byte b[ ], int off, int len ); //把字节数组b中从下标off开始,长度为len的字节写入流中
◇flush( ) //刷空输出流,并输出所有被缓存的字节
由于某些流支持缓存功能,该方法将把缓存中所有内容强制输出到流中。
◇关闭流:
close( ); //流操作完毕后必须关闭
§8.1.3 I/O中的异常
进行I/O操作时可能会产生I/O例外,属于非运行时例外,应该在程序中处理。如:FileNotFoundException, EOFException, IOException
§8.2文件处理
java.io包中提供的文件处理的类有:File、FileInputStream、FileOutputStream、FileDescriptor、RandomAccessFile以及接口FileNameFilter。
§8.2.1 文件描述
一、File类
1.File类:File类提供了一种与平台无关的方式来管理文件和目录的方法。通过File类提供的方法,可以得到有关文件和目录的描述信息,还可以建立,删除目录文件,改变文件和
目录的名称等,但File类不能访问文件的内容。
2.File类中常用的几种方法:
1)文件对象的生成:有三个构造方法可以生成一个文件对象或一个目录对象。
a)public File(String pathname)
b)public File(String parentStr,String childStr)
c)public File(File parentStr,String childStr)
说明:这三种方法只是生成一个文件对象,但没有生成真正的文件,如要生成实实在在

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。