IO流中每一个类都实现了Closeable接口,它们进行资源操作之后都需要执行close()方法将流关闭 。但字节流与字符流的不同之处在于:
字节流是直接与数据产生交互,而字符流在与数据交互之前要经过一个缓冲区
。
也就是说,字符流中的数据是暂存于缓冲区的,如果不将缓冲区中的数据真正地送达"目的地",结果就可能会和自己想的不太一样。
要清空缓冲区中的数据(即将缓冲区中数据送达目的地)有两种办法:
public abstract void close() throws IOException
关闭流的同时将清空缓冲区中的数据,该抽象方法由具体的子类实现public abstract void flush() throws IOException
不关闭流的话,使用此方法可以清空缓冲区中的数据
public class Writer_Flush_Test {
public static void main(String[] args) throws IOException {
File file = new File("D:\\hello.txt");
BufferedWriter bWriter = new BufferedWriter(new FileWriter(file));
bWriter.write("h");
}
}
public static void main(String[] args) throws IOException {
File file = new File("D:\\hello.txt");
BufferedWriter bWriter = new BufferedWriter(new FileWriter(file));
bWriter.write("h");
}
}
比如像上面这段程序,h字符是不会被写入到文件中的。因为在程序运行结束时,数据仍然是放在缓冲区中,并没有真正送达文件。要想真正写入,不用我说大家也应该知道。