java——使用字符串读取输出到txt

2019年2月22日23:05:53 发表评论 1,260 views
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()方法强制清空缓冲区。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: