面向字符的输入输出流
本文最后更新于: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 协议 ,转载请注明出处!