第9章输入输出流
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CharArrayReader 字符数组ቤተ መጻሕፍቲ ባይዱ入流
Reader 字符输入流
InputStreamReader 字符输入流
FilterReader 过滤器输入流
FileReader 文件输入流
PushbackReader 回压输入流
PipedReader 管道输入流
StringReader 字符串输入流
Reader类的两个常用子类
关闭输出流
l void flush()
清空输出流,使所有缓冲字节写完
l void write(byte[] b) 将数组b中的字节写到输出流
l void write(byte[] b, int off, int len)
l abstract void write(int b) 将字节b写到输出流
FileNotFoundException BufferedOutputStream 类和FileOutputStream类重写了OutputStream 类中的
write(int b)方法
9.2.3 Reader (字符输入流)类
Reader类称作字符输入流类,是一个抽象类。Reader
类为通用的输入字符流提供了一些基本方法和标准接 口
ObjectInputStream 对象输入流
InputStream 类的两个常用子类
(1)BufferedInputStream 类 当一个BufferedInputStream 类对象被创建时,就产生了一个内部缓冲数组,
因此,可以根据需要从连接的输入数据流中一次性读多个字节的数据到 内部缓冲数组中,这样可以提高读输入数据流的效率 BufferedInputStream的常用构造方法有: l BufferedInputStream(InputStream in) l BufferedInputStream(InputStream in, int size) (2)FileInputStream类 FileInputStream类主要用于文件的输入,创建的对象可以顺序地从本地机 上的文件中读数据 FileInputStream类常用的构造方法有: l FileInputStream(String name) throws FileNotFoundException l FileInputStream(File fileName) throws FileNotFoundException
out用于屏幕输出,常用的调用方法有:
l System.out.print(String str);
向屏幕输出字符串str
l System.out.println(String str);
向屏幕输出字符串str后换行
in用于屏幕输入,常用的调用方法有:
l System.in.read()
返回从键盘输入的字符
l System.in.read(byte[] b) 从键盘输入多个字符到数组b,并返回字符个 数
9.2 基本输入输出类
Java 有 四 个 最 基 本 的 输 入 输 出 类 : InpuStream 、 OutputStream、Reader 和Writer ,Reader 和Writer用于 字符流的输入输出
同样,OutputStream类定义的许多方法都有throws IOException 语句。
2. OutputStream类的常用子类
OutputStream是抽象类,它本身不能直接用来创建对象,但这个抽象类有 很多子类,这些子类实现了各种具体功能的输出字节流,可以通过实例 化它的子类来创建所需的对象
从程序向这个目的地输出数据,这样的流称为输出流 输入和输出的方向是以程序为基准的。通常,也把从输入流中
输入数据到程序中称为读数据(read),反之,从程序中将数 据输出到输出流中称为写数据(write) 具体步骤一般为: 打开一个流 while(数据存在时) 读数据或写数据 关闭流
9.1.2 字节流和字符流
9.1 数据流的概念
9.1.1 输入流和输出流 9.1.2 字节流和字符流 9.1.3 Java的标准数据流
9.1.1 输入流和输出流
在Java中,把所有输入和输出都当作流来处理。 流是按一定顺序排列的数据的集合 输入数据时,一个程序打开数据源上的一个流(文件或内存等),
然后按顺序输入这个流中的数据,这样的流称为输入流 输出数据时,一个程序可以打开一个目的地的流,然后按顺序
9.2.1 InputStream(字节输入流)类 9.2.2 OutputStream (字节输出流)类 9.2.3 Reader (字符输入流)类 9.2.4 Writer(字符输出流)类 9.2.5 FileReader和FileWriter(字符文件输入/输出
流)类
9.2.1 InputStream(字节输入流) 类
Java的输入输出流中,根据它们的数据类型,主要可分为两类 1. 字符流 字符流的输入输出数据是字符码,即Unicode字符(当遇到不同
编码的字符时,Java的字符流会自动将其转换成Unicode字符) 字符流有两个基本类:Reader 类和Writer类 Reader类和Writer类分别为字符型输入/输出流提供了读/写字
l long skip(long n)
跳过n个字节,返回跳过的字节个数
l abstract int read()
抽象方法,从输入流读下一个字节
2. 异常的抛出
InputStream类中的许多方法在调用时有可能出现 异常,例如,调用close()方法关闭文件时,文件 因种种原因有可能关闭不了,因此定义的这些方 法都有throws IOException语句。所以,close()方 法的完整定义为:
Reader类和InputStream类的很多方法很相似,它们的 主要区别是:InputStream类操作的是字节,Reader类
操作的是字符
Reader类的常用子类继承关系
常用的Reader类的子类以及子类的继承关系如图9.4所示
BufferedReader 缓冲输入流
LineNumberReader 行号输入流
比较常用的OutputStream类的子类以及继承关系如图9.3所示
FileOutputStream 文件输出流
PipedOutputStream 管道输出流
DataOutputStream 数据输出流
OutputStream 字节输出流
FilterOutputStream 过滤器输出流
BufferedOutputStream 缓冲输出流
void close() throws IOException 应用程序在调用这些方法时,如果不希望由系统
进行异常处理,而希望由应用程序进行异常处理, 则需要按照8.4.2节讨论的方法进行异常的抛出和 异常的处理
3. InputStream类的常用子类
InputStream是抽象类,它本身不能直接用来创建对象,但这个抽象类有
符的基本方法。 2. 字节流 字节流是按字节读/写二进制数据 字节流有两个基本的类:InputStream 类和 OutputStream类。
InputStream 类和 OutputStream类分别为字节型输入/输出流提 供了读/写字节码的基本方法
9.1.3 Java的标准数据流
ng包的System类定义了三个成员变量,分别是:
ByteArrayOutputStream 字节数组输出流
PrintStream 格式化输出流
ObjectOutputStream 对象输出流
OutputStream类的两个常用子类
(1)BufferedOutputStream 类 BufferedOutputStream 类对象被创建时,产生一个内部缓冲数组,因此,
l static final InputStream in
标准输入in
l static final PrintStream out
标准输出out
l static final PrintStream err
标准错误输出err
我们可以直接使用这些成员变量,不需要创建对象。in可以直接调用 InputStream类提供的输入方法;out和err可以直接调用PrintStream类提供 的输出方法
9.2.2 OutputStream (字节输出流) 类
OutputStream 类 称 作 字 节 输 出 流 类 , 也 是 一 个 抽 象 类 。 OutputStream类为其他的输出字节流子类提供了一些基本方法 和标准接口
1. OutputStream类的常用方法
l void close()
InputStream 字节输入流
FilterInputStream 过滤器输入流
ByteArrayInputStream 字节数组输入流
BufferedInputStream 缓冲输入流
PushbackInputStream 回压输入流
SequenceInputStream 顺序输入流
StringBufferInputStream 缓冲字符串输入流
很多子类,这些不同子类通过各自定义的抽象父类的抽象方法,实现了
各种不同功能的输入字节流。常用的InputStream类的子类以及它们的继
承关系如图9.2所示
FileInputStream 文件输入流
LineNumberInputStream 行号输入流
PipedInputStream 管道输入流
DataInputStream 数据输入流
(1)BufferedReader 类
BufferedReader 称作缓冲字符输入流,它在字符输入流的基础上,增加了 字符缓冲的功能
BufferedReader 类的构造方法有:
l BufferedReader(Reader in)
l BufferedReader(Reader in, int size)
InputStream类称作字节输入流类,是一个抽象类。它为其他输入字节流 子类提供了一些基本方法和标准接口
1. InputStream类的常用方法
l void close()
关闭输入流
l void mark(int readlimit)
标记输入流的当前位置
l boolean markSupport()
测试是否支持mark()方法和reset()方法
l int read(type[] b)
从输入流读若干个字节到数组b,返回字节个数
l int read(byte[], int off, int len)
数
读字节到数组b,起始为off,长度为len,返回字节个
l void reset()
复位,即将输入流的当前位置置为初始值
上的文件中写数据 FileOutputStream类的常用构造方法有: l FileOutputStream(String name) throws FileNotFoundException l FileOutputStream(File fileName) throws FileNotFoundException l FileOutputStream(String name, boolean app) throws
(2)InputStreamReader类
从BufferedReader类的构造方法可以看出,其参数只能是Reader类的对象, 而 代 表 标 准 输 入 的 System.in 是 一 个 InputStream 类 的 对 象 , 所 以 需 要 将 InputStream 类 的 对 象 转 换 成 Reader 类 的 对 象 , 这 就 需 要 一 个 转 换 器 。 InputStreamReader 类是将字节输入流转换成字符输入流的转换器。
可以从连接的输出数据流中一次性向内部缓冲数组中写多个字节的数据 BufferedOutputStream类的常用构造方法有: l BufferedOutputStream(OutputStream out) l BufferedOutputStream(OutputStream out, int size) (2)FileOutputStream类 FileOutputStream类主要用于文件的输出,它的对象可以顺序地向本地机
Reader类定义了两个抽象方法:
l abstract void close()
关闭输入字符流
l abstract int raed(char[] cbuf, int off, int len)
中
读起始位为off、长度为len的若干个字符进数组cbuf
Reader类的子类重写了不同功能的这两个抽象方法