字符流

164 阅读2分钟

字符输入流【Reader】

FileReader类

读取字符数据
public class Demo1 {
    public static void main(String[] args) throws IOException {
        //创建FileReader对象,绑定要读取的数据源
        FileReader reader = new FileReader("/Users/wym/a.txt");
        //使用read读取文件
        /*int len;
        while((len = reader.read()) != -1){
            System.out.println((char)len);
        }*/

        int len;
        char[] chars = new char[1024];
        while((len = reader.read(chars)) != -1){
            System.out.println(new String(chars,0,len));
        }
        //释放资源
        reader.close();
    }
}

字符输出流【Writer】

FileWriter类

输出数据(单个输出)
public class Demo1 {
    public static void main(String[] args) throws IOException {
        //创建FileWriter对象,绑定要写入数据的目的地
        FileWriter writer = new FileWriter("/Users/wym/c.txt");
        //使用write写入
        writer.write(97);
        //使用flush方法,将内存缓冲区中的数据,刷新到文件
        //writer.flush();
        //释放资源(回先把缓冲区中的数据刷新到文件)
        writer.close();
    }
}
关闭和刷新

因为内置缓冲区的原因,如果不关闭输出流,无法写出字符到文件中。但是关闭的流对象,是无法继续写出数据的。如果我们既想写出数据,又想继续使用流,就需要flush方法了

  • flush :刷新缓冲区,流对象可以继续使用
  • close :先刷新缓冲区,然后通知系统释放资源。流对象不可以继续使用
写数据的其他方式
public class Demo1 {
    public static void main(String[] args) throws IOException {
        //创建FileWriter对象,绑定要写入数据的目的地
        FileWriter writer = new FileWriter("/Users/wym/d.txt");
        char[] chars = {'a','b','c','d','e'};
        writer.write(chars);
        writer.write(chars,1,3);
        writer.write("曼彻斯特城");
        //释放资源(回先把缓冲区中的数据刷新到文件)
        writer.close();
    }
}
续写和换行
public class Demo3 {
    public static void main(String[] args) throws IOException {
          //创建FileWriter对象,绑定要写入数据的目的地
        FileWriter writer = new FileWriter("/Users/wym/e.txt",true);
          //写出字符串
        writer.write("曼城");
        //写出换行
        writer.write("\r");
        //写出字符串
        writer.write("德布劳内");
          //释放资源(回先把缓冲区中的数据刷新到文件)
        writer.close();
      }
}

小贴士 :字符流,只能操作文本文件,不能操作图片,视频等非文本文件。

当我们单纯读或者写文本文件时,使用字符流,其他情况使用字节流