黑马程序员技术交流社区

标题: 关于流的问题 [打印本页]

作者: papercup    时间: 2014-3-29 23:58
标题: 关于流的问题
本帖最后由 papercup 于 2014-3-30 10:00 编辑

今天看了关于IO流的视频,流在使用后一定要关闭。但是close();方法描述说的是:关闭此流,但要先刷新它。那么它具体是怎么做的呢?
自己测试了一下:
  1. import java.io.*;
  2. class WriterDemo1{
  3.         public static void main(String[] args) throws IOException{
  4.                 FileWriter fw = new FileWriter("E:\\demo.txt");
  5.                 fw.write("abscsdtdsafdas");
  6.                 //fw.flush();                      //刷新该流的缓冲
  7.                 fw.close();
  8.         //        fw.write("xxxxxxx");
  9.         //        fw.flush();
  10.         }
  11. }
复制代码
将fw.flush();注释之后,得到的结果一样,那么fw.close();是不是一样会刷新这个流,之后才将它关闭掉呢?

作者: 郝大龙0104    时间: 2014-3-30 00:25
嗯 。。 是的   刷新完再关闭的

flush( )方法是刷新一下字符流, 但是此时 字符流不关闭 还可以用的

但是 close()方法  是先刷新一下字符流  然后再关闭流   以后流就不能再用啦
作者: NO?    时间: 2014-3-30 00:37
1、如果你将fw.flush();注释,那么demo。txt中的文本信息为"abscsdtdsafdas"


2、如果你不将将fw.flush();注释,那么demo。txt中的文本信息为"abscsdtdsafdas"
但是会出现运行时会出现异常。
如Exception in thread "main" java.io.IOException: Stream closed所示。

代码改进如下;你可以得到你要的效果了
import java.io.*;
class WriterDemo1{
        public static void main(String[] args) throws IOException{
                FileWriter fw = new FileWriter("E:\\demo.txt");
                fw.write("abscsdtdsafdas");
                //fw.flush();                      //刷新该流的缓冲
               
            //    fw.write("xxxxxxx");
        //        fw.flush();
                          fw.close();
        }
}

作者: H-Deka    时间: 2014-3-30 09:58
close()和flush()的区别就是前者关闭流之前会刷新一次流的缓冲区然后关闭此流,后者单纯的刷新流而已,close()关闭此流后此流就不能再用了,flush()刷新流后,此流还可以继续使用




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2