Java PrintWriter无法写入的问题

来源:互联网 发布:浙江诸暨淘宝司法拍卖 编辑:程序博客网 时间:2024/05/21 01:49

项目日志出现莫名其妙的缺失,从当天某个时间段之后日志就全部没有了。日志每3秒写入一次,文件最后的修改时间距离日志最后记录的时间相差几分钟,排除人为删除的因素之后,技术层面发现了一些问题。

Writer的创建

PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file, true), "UTF-8"));

日志写入

writer.println(data);writer.flush();

检查发现,日志写入时文件是一直被占用的。若强行解除文件占用,就会出现文件无法写入,而且不会抛出异常的问题。初步判断为人为查看日志时意外修改导致文件被解除占用,具体原因不明。

修正方法:写入数据后使用writer.checkError()方法检查是否存在错误,若有,则重新创建writer,将数据再写一遍。


java.io.PrintWriter 此类中的方法不会抛出 I/O 异常,尽管其某些构造方法可能抛出异常。客户端可能需要通过调用 checkError() 检查是否出现错误。java.io.PrintWriter.checkError() 该方法刷新流,如果它尚未关闭,并检查其错误状态。如果打印流在底层输出流或格式转换期间遇到错误,该方法返回true

修正代码:

writer.println(data);if (writer.checkError()){try{createWriter();writer.println(data);if (writer.checkError()){Log.error("日志重建异常!data:" + data);}}catch (Exception e){Log.error("日志写入异常!" + data, e);}}writer.flush();

0 0
原创粉丝点击