文件字符
输入、输出流
文件字节输入、输出流的read和write方法使用字节数组读写数据,即以字节为单位处理数据。因此,字节流不能很好地操作Unicode字符,例如,一个汉字在文件中占用两个字节,如果使用字节流,读取不当会出现“乱码”现象。
与FileInputStream、FileOutputStream字节流相对应的是FileReader、FileWriter字符流(文件字符输入、输出流),FileReader和FileWriter分别是Reader和Writer的子类,其构造方法分别是:
FileReader(String filename); FileReader(File filename);FileWriter(String filename); FileWriter(File filename);FileWriter(String filename,boolean append); FileWriter(File filename,boolean append);
字符输入流和输出流的read和write方法使用字符数组读写数据,即以字符为基本单位处理数据。
下面的例子6使用文件字符输入、输出流将文件a.txt的内容尾加到文件b.txt中。
import java.io.*;public class Example6 { public static void main(String[] args) { File sourceFile = new File("a.txt"); //读取的文件 File targetFile = new File("b.txt"); //写入的文件 char c[] =new char[19]; //char型数组 try { Writer out = new FileWriter(targetFile,true); //指向目的地的输出流 Reader in = new FileReader(sourceFile); //指向源的输入流 int n=-1; while((n=in.read(c))!=-1) { out.write(c,0,n); } out.flush(); out.close(); } catch(IOException e) { System.out.println("Error "+e); } }}
左右滑动或点击查看全图
注:对于Writer流,write方法将数据首先写入到缓冲区,每当缓冲区溢出时,缓冲区的内容被自动写入到目的地,如果关闭流,缓冲区的内容会立刻被写入到目的地。流调用flush()方法可以立刻冲洗当前缓冲区,即将当前缓冲区的内容写入到目的地。