Java PrintWriter无法写入的问题
2016-12-02 10:46
323 查看
项目日志出现莫名其妙的缺失,从当天某个时间段之后日志就全部没有了。日志每3秒写入一次,文件最后的修改时间距离日志最后记录的时间相差几分钟,排除人为删除的因素之后,技术层面发现了一些问题。
Writer的创建
日志写入
检查发现,日志写入时文件是一直被占用的。若强行解除文件占用,就会出现文件无法写入,而且不会抛出异常的问题。初步判断为人为查看日志时意外修改导致文件被解除占用,具体原因不明。
修正方法:写入数据后使用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();
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中无法在replaceAll替换"+"的问题
- java读取系统时间写入mysql数据库时,滞后八小时问题的解决
- vc2005 unicode下 cstdiofile无法写入中文的问题
- 解决UNICODE字符集下CStdioFile的Writestring无法写入中文的问题
- (转)解决UNICODE字符集下CStdioFile的Writestring无法写入中文的问题
- asp中关于数据库无法写入问题的解决
- 解决重启机器后,ArcGIS Server for Java的REST接口无法访问的问题
- Flex+Java 解决SSL(https)下IE浏览器无法正常工作的问题
- eclipse下写入中文字符后无法保存的问题
- C#调用Java端Web服务(CXF)时发生Integer参数类型无法传递的问题
- java写入文件时庄和薛字的问题
- 解决ArcGIS Server for the Java Platform中manager无法登陆的问题
- java读取系统时间写入mysql数据库时,滞后八小时问题的解决 - ghostgarlic的专栏 - CSDNBlog
- Java中无法捕获C程序printf输出的问题
- 开发视频监控系统纪实 10 视频录制过程中的内存无法写入问题
- JAVA中无法处理带有特殊字符文件名的zip包的问题解决
- PrintWriter写入文件问题【转载综合】
- ArcGIS Server for the Java Platform中manager无法登陆的问题
- java向csv写入html数据的问题
- cookie无法写入的问题