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时表示读到末尾。