我们已经介绍了字节流类并详细地讲解了字节流。虽然字节流的功能十分强大,它能直接或间接地处理任何数据类型的输入和输出操作,但是它却不能直接操作16位的Unicode字符。这时提供直接的字符输入和输出就显得非常有必要了。
1)、如何读取Unicode字符
Reader和Writer类处在字符流类的顶层,是所有字符流类的基类。同时它们都是抽象的,它们仅提供了基本的函数类型,没有具体实现,所以不能直接生成对象。要通过其子类来生成所需的对象,同时必须重写Reader和Writer类中的方法。下面是它们的主要方法:
Reader方法:
>read():从输入流中读取下一个字符,并以int类型返回。如遇输入流的末尾则返回-1
>read(char[] buffer):读取长度为buffer.length的字符到buffer中,返回本次读取的字符数;
>read(char[] buffer , int off , intlen):同上,写入buffer中从下标off开始的位置,并返回本次读取的字符数。
>close():关闭当前的输入流;
>skip(long n):跳过n个字符,返回实际跳过的字符数;
>mark(int readlimit):在输入流的当前位置设置标记,该标记在从流中读取readlimit个字符前都保持有效;
>markSupported():测试调用的流是否支持mark()/reset();
>ready():测试输入流是否准备好读取字符;
>reset():重置输入指针到先钱设定的标记处。
Writer方法:
>write(int c):将指定的字符c作为数据写入输出流,下面是对其的重写:
>write(char[]buffer):将buffer中长度为buffer.length个字符的数据写入输出流;
>write(char[] buffer , int off , intlen):同上,将buffer中从下标off开始的长度为len个字符的数据写入输出流;
>write(String str):将字符串str写入输出流;
>write(String str , intoff , int len):将字符串中以off为起点的len个字符写入输出流;
>close():关闭当前的输出流,同时释放相关的系统资源;
>flush():刷新输出流。
上述方法在调用时如果出现错误,将会跑出一个IOException异常。
2)、读取字符文件
FileReader和FileWriter类分别继承了Reader和Writer类,它们重写了父类中的所有方法,主要用于字符文件的读写操作。FileReader类用于读取字符文件的内容,每次赌气一个字符或一个字符数组。FileWriter类用于写入字符文件的内容,每次写入一个字符或一个字符串。
FileReader类的两个常用的构造函数如下:
> FileReader(StringfilePath)//filePath指被打开并被读取数据的文件的全路径
>FileReader(FilefileObj)//fileObj指被打开并被读取数据的文件
下面的实例讲解了FileReader的使用方法:
public static voidmain(String[] args) {
try {
FileReader fr = newFileReader("D:\\桌面\\桌面\\安卓开发工具\\学习笔记\\test1.txt");
//每次读取一个字符
char[] c = new char[1];
while (fr.read(c) != -1)
System.out.print(new String(c));
fr.close();
} catch (Exception e) {
e.printStackTrace();
}
}
FileWriter类常用的构造函数如下:
>FileWriter(String filePath)
>FileWriter(String filePath , boolean append)
>FileWriter(String fileObj)
FileWriter对象的创建不依赖文件是否存在。如果文件不存在,FileWriter会在打开输出文件之前创建它。如果文件存在,则打开它并准备写入内容。下面的实例讲解了如何从文件中读取数据并写入另一个文件:
public class test {
public static void main(String[] args) {
int i;
FileReader fr;
FileWriter fw;
try {
fr = new FileReader("D:\\桌面\\桌面\\安卓开发工具\\学习笔记\\test01.txt");
} catch (Exception e) {
System.err.println("文件未找到");
return;
}
try {
fw = new FileWriter("D:\\桌面\\桌面\\安卓开发工具\\学习笔记\\test02.txt");
}catch (Exception e) {
System.err.println(e);
return;
}
try {
i = fr.read();//读取数据
while (i != -1) {
fw.write(i);
i = fr.read();
}
fr.close();
fw.close();
System.err.println("运行完毕");
} catch (Exception e) {
System.err.println(e);
}
}
}