关于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的机制,是会等到缓冲区满了之后再向文件写入内容,不是一个一个写的。但是这个也不是
事务回滚的控制
------解决方案--------------------这个还真没见过。硬盘空间够用吧。。