黑马程序员_IO流之字符流

FileWriter

数据最常见的体现形式:文件

FileWriter是专门操作文件的Writer子类。(后缀名是父类名,前缀名是该流对象的功能。)

创建一个FileWriter类对象,对象一旦被初始化就要明确操作的文件。该文件会被创建到指定目录下,如果原已有同名文件,将被覆盖。其实该步骤就是在明确数据存放的目的地:

FileWriter fw = new FileWriter("xxx.txt");
写数据(其实是把数据写到流对象中去):

fw.write(“aaaaa”);
用刷新流对象将流对象中的数据刷到目的地中去:

fw.flush();
关闭流资源,关闭后流就没了(关闭前会自动刷新一次):

fw.close();


IO异常的处理方式

IO异常的标准处理方式如下:(注意注释处)

import java.io.*;
class IOExceptionDemo
{
  public static void main(String[] args)
  {
    FileWriter fw = null;  //在try代码块外声明变量,不然别的代码块中访问不到
    try
    {
      fw = new FileWriter("aaa.txt");
      fw.write("abcde");
    }
    catch(IOException e)
    {
      System.out.println(e.toString());
    }
    finally
    {
      try
      {
        if(fw!=null)  //判断不为空才可关闭
          fw.close();
      }
      catch(IOException e)
      {
      System.out.println(e.toString());
      }
    }
  }
}

按照以上方法,每次创建FileWriter流对象都会覆盖原文件,对已有文件的数据续写该如何做?

构造方法加个true:

FileWriter fw = new FileWriter("xxx.txt", true);




FileReader

创建一个文件读取流对象,和指定名称的文件相关联;文件必须存在,不然会抛出FileNotFoundException。

  • 读取方法1:
    • int read() 方法:一次读取一个字符,而且依次往下读。
  • 读取方法2:
    • 定义一个字符数组,用于存储读到的字符。该read(char[])返回的是读到的字符个数:
    • FileReader fr = new FileReader("xxx.txt");
      
      char[] buf = new char[1024];
      int num = 0;
      while((num = fr.read(buf))!=-1)
        System.out.print(new String(buf,0,num));
      fr.close();

实例:将C盘一个文件复制到D盘。

原理:其实就是读取C盘文件的数据存储到D盘文件中。


字符流缓冲区:

  • 缓冲区的出现提高了对数据的读写效率
  • 对应类: BufferedWriter BufferedReader
  • 缓冲区要结合流才可以使用
  • 在流的基础上对功能进行了增强。
缓冲区是为了提高流的效率而出现的,所以在使用缓冲区之前必须先有流对象。
流对象作为参数传递给缓冲区的构造函数。

BufferedWriter:
newLine()方法跨平台换行。
import java.io.*;
class BufferedWriterDemo
{
  public static void main(String[] args) throws IOException
  {
    FileWriter fw = new FileWriter("a.txt");
    BufferedWriter bw = new BufferedWriter(fw); //流对象作为参数传递给缓冲区对象
    for(int i = 0; i < 5; i++)
    {
      bw.write("abcde" + i);
      bw.newLine(); //换行
      bw.flush(); //缓冲区记得刷新,以免遇到断电等突发事件
    }
    bw.close(); //关闭缓冲区也关闭了流,无需再关闭。
  }
}

BufferedReader:
readLine()方法读取一行,不读取行终止符,方便于对文本数据的获取。返回null时表示读到末尾。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值