日期:2014-05-20  浏览次数:20943 次

关于BufferedWriter的write抛异常问题
比如我要将一串字符串“123456789”写入一个文件中,使用BufferedWriter的write方法。如果write方法在写入的时候抛异常了(已经使用finally对BufferedWriter进行关闭了),请问有没有可能发生文件只写入“123456789”的前一部分情况。

就是说有没有可能发生这样情况:
我要在a.txt文件中写入“123456789”,但是在write方法写的时候发生了异常。并且a.txt文件中出现了“12345”.

示例代码:
Java code

    public static void main(String[] args) throws IOException {
        BufferedWriter pw=null;
        try{
            pw=new BufferedWriter(new FileWriter("C:\\1.log",true));
            StringBuffer hisStr = new StringBuffer();
            hisStr.append("192.168.1.39|");
            hisStr.append(null+"|");
            hisStr.append("1001|");
            hisStr.append("3|");
            hisStr.append("444|");
            hisStr.append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
            hisStr.append("\r\n");
            pw.write(hisStr.toString());
        }catch(Exception e){
            System.out.println(e);
        }finally{
            pw.flush();
            pw.close();
        }
    }



在pw.write这里写了一半突然抛异常,有没有可能文本中会记录类似"192.168.1.39|null|" 这不全的信息。我跟踪了java.io的源文件,可惜内功不够,看不懂里面的实现。。。希望哪位大哥大姐指点一二。
先谢谢了!

------解决方案--------------------
java IO是用jni弄的,本就不是java语言实现的。搞不懂很正常
------解决方案--------------------

你问的是底层的事情了,第二种情况是类似数据库的事务回滚,我不知道write具体怎么写进文件

钻研精神是好的,不过学习java穷于钻研这些东西,那已经丧失了java的优势,你还不如直接学习汇编呢

如果用了Buffered的机制,是会等到缓冲区满了之后再向文件写入内容,不是一个一个写的。但是这个也不是

事务回滚的控制

探讨

也就是说,我不清楚这个write是怎么写进文件是,是一个一个写入呢

比如我写“123456789”,先写1,再写2,依此类推。还是先把“123456789”读出来,再全部一次性写入
如果是第一种,应该会出现写入部分“12345”的问题吧,如果是第二种,应该是要么全部写进去,要不全没写进入。

------解决方案--------------------
这个还真没见过。硬盘空间够用吧。。