A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 龚正军 中级黑马   /  2012-5-7 22:08  /  1244 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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的判定才能在之前文件里面追加字符,但是为什么上面不用都可以直接在后面追加字符,而没有重新写文本??

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

5 个回复

倒序浏览
因为你的bw没有关闭,也就是说你的线程还处在txt内部   所以可以接着写
   你先关闭了再重新开 再写的话就不行了
回复 使用道具 举报
FileWriter fl=new FileWriter("ggg.txt")等效
FileWriter fl=new FileWriter("ggg.txt",false)。
回复 使用道具 举报
不是那么回事哦,因为在writer里面的函数就有2种函数,一种带true结构,一个没带的,(重载形式),你可以查看下apil里面就是!!

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


那么如果不用缓存,而直接用流进行,是不是就不存在硬盘读写的时候脚标自动移位难??因为,如果不使用缓存,确实存在不能继续在内容后面添加的情况,需要true!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马