package filetest;
import java.io.*;
public class chardemo {
public static void main(String argsp[])
{
File f = new File("C:\\temp2.txt");
Writer out = null;
try{
out = new FileWriter(f);
}
catch(IOException e)
{
e.printStackTrace();
}
//声明一个string对象
String str = "Hello World!!!";
try{
//将str的内容写入到文件中
out.write(str);
}
catch (IOException e1){
e1.printStackTrace();
}
try{
out.close();
}
catch (IOException e2){
e2.printStackTrace();
}
//以下为读文件操作
Reader in = null;
try{
in = new FileReader(f);
}
catch(FileNotFoundException e3){
e3.printStackTrace();
}
//开辟一个空间用于接收文件读进来的数据
char c1[] = new char[1024];
int i = 0;
try{
//将c1的引用传递到read()方法之中,同时此
//方法返回读入数据的个数
i = in.read(c1);
}
catch(IOException e4){
e4.printStackTrace();
}
try
{
in.close();
}
catch(IOException e5){
e5.printStackTrace();
}
//将字符数组转换为字符串输出
System.out.println(new String(c1,0,i));
}
}
若将24-28行注释掉,也就是最后不关闭文件,就会发现下面读取的结果是空白。原因是:
查看JDK可以看到,File Writer类并不是直接继承自Writer类,二十继承了Writer的子类(OutputStreamWriter),此类为字节流和字符流的转换类,也就是说真正从文件读取进来的数据还是字节,只是在内存中将字节转换成了字符。所以可得出一个结论:字符流用到了缓冲区,二字节流没有用到缓冲区,另外也可以用Writer类中flush()方法强制清空缓冲区。