面向字符的输入输出流
本文最后更新于:2024年3月18日 凌晨
面向字符的输入输出流
面向字符的输入流
- 面向字符的输入流都是类Reader 的后代,如下图所示:
-
Reader类是一个抽象类,提供的方法与InputStream类似,只是将基于byte的参数改为基于char,下面列出了几个常用的方法。
public int read():从流中读一个字符,返回字符的整数编码,如果读至流的末尾,则返回-1public int read(char[] b,int off,int len):从流中读一个字符,返回字符的整数编码,如果读至流的末尾,则返回-1public int read(char[] b):等价于read(buf,0,buf.length)形式。public long skip(long n):指针跳过n个字符,定位输入位置指针的方法。
-
类Reader的常见子类及功能描述如下表所示:
| 类名 | 构造方法的参数 | 功能描述 |
|---|---|---|
| CharArrayReader | 字符数组char[ ] | 用于对字符数据中的数据进行转换 |
| BufferedReader | 类Reader的对象 | 为输入提供缓冲的功能,提高效率 |
| LineNumberReader | 类Reader的对象 | 为输入数据附加行号 |
| InputStreamReader | InputStream的对象 | 将面向字节的输入流转换为字符输入流 |
| FileReader | File对象或字符串表示的文件名 | 文件作为输入源 |
| PipedReader | PipedWrite的对象 | 与另一输出管道相连,读取另一管道写入的字符 |
| StringReader | 字符串 | 以字符串作为输入源,用于对字符串中的数据进行转换 |
[例13-5]:从一个文本文件中读取数据加上行号后显示。
1 | |
- 注意:
readLine()方法在遇到文件末尾时将返回null
面向字符的输出流
面向字符的输出流类都是类Writer的后代,如下图所示:
-
Writer类是一个抽象类,提供的方法与OutputStream类似,只是将基于byte的参数改为基于char,下面列出了常用的几个方法:public void write(int c):往字符输入流写入一个字符,它是将整数的低16位对应的数据写入流中,高16位将忽略。public void write(char[] cbuf):将一个字符数组写入到流中。public void write(String str):将一个字符串写到流中。
-
Write类的常见子类的简要介绍如下表所示:
| 类名 | 构造方法的主要参数 | 功能描述 |
|---|---|---|
| CharArrayWriter | 字符数组char[ ] | 用于对字符数组中的数据进行转换 |
| BufferedWriter | 类Writer的对象 | 为输出提供缓冲功能,提高效率 |
| OutputStreamWriter | OutputStream的对象 | 将面向字节的输出流转换为字符输出流 |
| FileWriter | 文件对象或字符串表示的文件名 | 文件作为输出源 |
| PipedWriter | PipedReader的对象 | 与另一输出管道相连,写入数据给另一管道供其读取 |
| StringWriter | 字符串 | 以程序中的一字符串作为输出源,用于对字符数组中的数据进行转换 |
| FilterWriter | Writer的对象 | 装饰另一输出流以提供附加的功能 |
| PrinterWriter | Writer的对象或OutputStream的对象 | 为所装饰的输出流提供打印输出,与类PrintStream只有细微差别 |
- 以下结合实例介绍FileWriter类的使用,该类的直接父类是
OutputStreamWriter,后者又继承Writer类,FileWriter的常用构造方法如下。FileWriter(String fileName):根据文件名构造一个FileWriter对象。FileWriter(String fileName,boolean append):第一个参数为文件名,第二个参数用于指示是否可以往文件中添加数据。
[例13-6]:用FileWriter流将ASCII英文字符集字符写入到文件。
1 | |
- 说明:FileWriter类的构造方法,
write()方法及close()方法可能产生IO异常,必须进行异常捕获处理,执行FileWriter的构造方法时,如果文件不存在,将自动创建文件。 - 注意:前面介绍的Writer类的3个方法均可实现汉字的写入,例如:
1 | |
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!
