您的位置:首页 > 编程语言 > Java开发

Java PrintWriter无法写入的问题

2016-12-02 10:46 323 查看
项目日志出现莫名其妙的缺失,从当天某个时间段之后日志就全部没有了。日志每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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java Printer 日志异常