黑马程序员技术交流社区

标题: 关于IO问题!! [打印本页]

作者: 龚正军    时间: 2012-5-7 22:08
标题: 关于IO问题!!
import java.io.*;

class BufferedWriterDemo
{
        public static void main(String[] args) throws IOException
        {
                FileWriter fl=new FileWriter("ggg.txt");
                BufferedWriter bw=new BufferedWriter(fl);

                bw.write("abcdef");
                //bw.newLine();
                bw.write("dfsfsf");
                bw.flush();
                bw.close();
        }
}

FileWriter fl=new FileWriter("ggg.txt");------------------------------------------------------这里面并没有加入true append的判定,为什么后面能继续在后面追加字符,而不是从新写一个文本??

按毕老师的讲解:FileWriter fl=new FileWriter("ggg.txt",true);------------------------------------------------------追加了true append的判定才能在之前文件里面追加字符,但是为什么上面不用都可以直接在后面追加字符,而没有重新写文本??
作者: 蒋映辉    时间: 2012-5-7 22:40
因为你的bw没有关闭,也就是说你的线程还处在txt内部   所以可以接着写
   你先关闭了再重新开 再写的话就不行了
作者: Zhang_qian    时间: 2012-5-7 22:57
FileWriter fl=new FileWriter("ggg.txt")等效
FileWriter fl=new FileWriter("ggg.txt",false)。
作者: 龚正军    时间: 2012-5-7 22:58
不是那么回事哦,因为在writer里面的函数就有2种函数,一种带true结构,一个没带的,(重载形式),你可以查看下apil里面就是!!

close();后不能再写,是我知道的,那不是这里讨论的问题,而是在文本里面续写的问题!----------------续写问题才是我问的。看上面!
作者: 李保成    时间: 2012-5-7 23:46
bw.write("abcdef");   
bw.write("dfsfsf");
你要问的问题是不是说为什么在插入abcdef后还会继续插入 dfsfsf,而不是覆盖掉前边的abcdef吗?
简单分析一下,因为你这时候bw输入流还没有结束,该缓存一直存在,简单说一下缓存中的结构,它是以数组形式存在,这时候你插入数据时,它的角标值对应的是你上次插入的数据对应的角标值+1,再次写入时,它会在刚才的基础上像后写入。所以会出现直接追加的形式。
作者: 龚正军    时间: 2012-5-8 00:30
楼上的意思是:缓存中存在角标自动以为的问题,我认为可以这么解释。


那么如果不用缓存,而直接用流进行,是不是就不存在硬盘读写的时候脚标自动移位难??因为,如果不使用缓存,确实存在不能继续在内容后面添加的情况,需要true!!




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