字符流主要用于支持Unicode的文字内容,绝大多数在字节流中所提供的类,都可在此找到对应的类。其中,输入流Reader抽象类帮助用户在Unicode流内获得字符数据,而Writer类则实现了输出。可以利用Reader类是所有字符输入流的父类,而Writer类所有字符输出流的的父类。
Reader类和Writer类
以Reader和Writer为基础派生的一系列类。Reader和Writer都是抽像类。只提供了一系列用于字符流处理的接口。
FileReader类和FileWriter类。
前面的FileInputStream使用字节读取文件,字节流不能直接操作Unicode字符,所以java提供了字符流。
1.FileReader类
FileReader类于读取文件,每次读取文件中的第一个未读取过的字符,并以ASCII码或UTF-8码的形式输入到程序中。语法格式如下:
FileReader fr=new FileReader(filename)
其中文件名必须是文件完整的路径和文件名,如果程序和该文件保存在同一目录下,则可以只用文件名而不需要其路径,FileReader类中的read()方法用来读取字符并返回一个相应的int类型数据。当读到文件的结尾处时,则返回值-1,在完成文件数据的读取后需要使用close()方法关闭打开的文件。
代码如下:
import java.io.*;
public class FileReadDemo {
public static void main(String []args)throws IOException{
//创建一个FileRead类型的对象
FileReader fr=new FileReader("student.txt");
int a=fr.read();//从文件中读取字符并存入a中
while(a!=-1){//判断文件内容是否结束
System.out.print((char)a);//输出读取的字符到控制台
a=fr.read();//读取下一个字符
}
fr.close();//关闭文件 阅读器
}
}
在这个程序中构建一个文件阅读器FileReader的对象实例fr,通过while循环语句调用其read方法依次读取字符,并判断是否到了文件结束出。如果没有到文件结尾,则将读取的整数强制转换为char类型,并输出到控制台中,在程序最后,要关闭流。在声明main()方法时,添加了throwsIOException用来处理输出和输入文件时发生的异常。当然,也可以使用try和catch语句来处理异常。但是如果不需要异常的具体处理方法,则可以只用throws关键字。
2:FileWriter类
FileWriter类用于将数据写入文件语法格式如下:
FileWriter fr=new FileWriter(filename);
其中,文件名必须是文件的完整路径和文件名,如果程序和该文件保存在同一目录下,则可以只用文件名而不需要其他路径。如果该文件名不存在,则系统会自动创建该文件。FileWriter类中的write()方法可以将文字或字符串写入文件中。当完成数据写入操作后,使用close()方法关闭文件。示例代码如下:
import java.io.*;
public class FileWriter {
public static void main(String []args) throws IOException{
//创建一个FileWriter类型的对象
FileWriter fw=new FileWriter();
fw.write("thisismy");//像文件中写入字符串
fw.write("stu");
fw.write("dent");
fw.write(".");//向文件中写入字符
fw.write("txt");
fw.write("这个是我的文件。");
fe.close();
}
}
}
在这个程序中,构建了一个写入器FileWriter对象实例fw,调用其write()方法向文本文件student.txt中写入各种文本。在这个程序中,没有代码捕获异常,而是在main()方法头部使用throws关键字抛出IOException异常,将异常交给虚拟机处理。