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

2022-09-04 22:47:11

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

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

仅供参考,我正在使用

DataOutputStream

以写出文件。仅当我的应用关闭时,我才会刷新。


答案 1

你不能,任何时候都可能发生。如果你仔细想想,在任何时候,在写入第一个字节之前,在写入第一个字节之后,连接发生了一些事情 - 或者在中间,如果数据块很大,则可能是由软件或硬件故障引起的。IOExceptionIOException

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

阅读关系数据库中的事务日志,了解大型和可靠的软件如何处理此类情况。


答案 2

这取决于写入失败的方式,但中断IOException可能是您要查找的:

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

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