在java中写入文件期间的IOException处理

时间:2012-07-26 14:04:56

标签: java file io

我的应用程序不断地将大量字节写入文件。如果我的代码块正在写出字节并且如果与驱动器或网络的连接丢失则获得IOException,我怎么知道它写了多少字节?

例如,我一次写2500个字节,如果发生IOException,是否意味着它没有写入文件,或者它会将部分字节写入文件?如果将部分字节写入文件,我怎么知道写了多少

仅供参考我正在使用

DataOutputStream

写出文件。我的应用程序关闭时才会刷新。

2 个答案:

答案 0 :(得分:6)

你不能,IOException随时可能发生。如果你考虑一下,IOException可能是由软件或硬件故障引起的,在写入第一个字节之前,在写完所有内容之后但连接发生了某些事情 - 或者如果数据块是非常大。

重新连接后,您必须检查文件大小或使用其他一些技术使文件保持一致状态并恢复。最简单的安全网:在写入数据之前读取文件大小并可靠地存储,写入数据并在写入后读取文件大小。如果发生错误且当前文件大小不等于预期文件大小(上次保存),则截断额外字节并重试。

阅读关系数据库中的事务日志,了解有多大和可靠的软件处理此类案例。

答案 1 :(得分:1)

这取决于写入失败的方式,但是InterruptedIOException可能正是您所寻找的:

http://docs.oracle.com/javase/1.4.2/docs/api/java/io/InterruptedIOException.html

它包含“bytesTransferred”的字段: “报告在中断之前作为I / O操作的一部分传输了多少字节。”

相关问题