文件字节输入输出流的read和write方法使用字节数组读写数据,即以字节为单位处理数据。因此,字节流不能很好地操作Unicode字符。比如,一个汉字在文件中占用2个字节,如果使用字节流,读取不当会出现“乱码”现象。
与FileInputStream、FileOutputStream字节流相对应的是FileReader、FileWriter字符流(文件字符输入、输出流),FileReader和FileWriter分别是Reader和Writer的子类,其构造方法分别是:
FileReader(Stringfilename);FileReader(Filefilename);Fi1eWriter(Stringfilename);FileWriter(Filefilename);FileWriter(Stringfilename,booleanappend);FileWriter(Filefilename,booleanappend);
字符输入流和输出流的read和write方法使用字符数组读写数据,即以字符为基本单位处理数据。
例如:
importjava.io.*;publicclassMain{publicstaticvoidmain(Stringargs[]){FilesourceFile=newFile(a.txt);//读取的文件FiletargetFile=newFile(b.txt);//写入的文件charc[]=newchar[19];//char型数组try{Writerout=newFileWriter(targetFile,true);//指向目的地的输出流Readerin=newFileReader(sourceFile);//指向源的输入流intn=-1;while((n=in.read(c))!=-1){out.write(c,0,n);}out.flush();out.close();}catch(IOExceptione){System.out.println(Error+e);}}}
注意:对于Writer流,write方法将数据首先写入到缓冲区,每当缓冲区溢出时,缓冲区的内容被自动写入到目的地,如果关闭流,缓冲区的内容会立刻被写入到目的地。流调用flush()方法可以立刻冲洗当前缓冲区,即将当前缓冲区的内容写入到目的地。