我的应用程序不断地将大量字节写入文件。如果我的代码块写出字节,并且如果与驱动器或网络的连接丢失,则会发生IOException,我怎么知道它写入了多少字节?在java中写入文件时发生IOException处理
例如,我一次写入2500个字节,如果发生IOException,这是否意味着它没有写入文件,或者它将部分字节写入文件?如果部分字节写入文件我怎样知道仅供参考我使用
DataOutputStream
写出来的文件,有多少写
。我只在我的应用程序关闭时才刷新。
我的应用程序不断地将大量字节写入文件。如果我的代码块写出字节,并且如果与驱动器或网络的连接丢失,则会发生IOException,我怎么知道它写入了多少字节?在java中写入文件时发生IOException处理
例如,我一次写入2500个字节,如果发生IOException,这是否意味着它没有写入文件,或者它将部分字节写入文件?如果部分字节写入文件我怎样知道仅供参考我使用
DataOutputStream
写出来的文件,有多少写
。我只在我的应用程序关闭时才刷新。
您不能,IOException
可以在任何时候发生。如果你仔细想一想,IOException
可能是因为软件或硬件故障导致的,在第一个字节被写入之前,所有的都被写入了,但是连接发生了什么 - 或者在数据块相当大的情况下。
重新连接后,您必须检查文件大小或使用其他一些技术来使文件保持一致状态并恢复。最简单的安全网:在写入数据并可靠存储之前读取文件大小,写入后写入数据并读取文件大小。如果错误发生且当前文件大小不等于预期的文件大小(上次保存),则截断多余的字节并重试。
阅读有关关系数据库中的事务日志,了解软件如何处理这种情况。
这取决于写是如何失败的,但InterruptedIOException可能是你在找什么:
http://docs.oracle.com/javase/1.4.2/docs/api/java/io/InterruptedIOException.html
它包含的字段“bytesTransferred”: “报告字节数过得怎么样在它被中断之前作为I/O操作的一部分进行传输。“
你用什么方法写入文件?我相当确定像BufferedOutputStream这样的东西会给你一个与OutputStream不同的结果。 – xthexder 2012-07-26 14:09:37
你也可以查看http://stackoverflow.com/questions/1742361/flush-in-java-io-filewriter,这也可以帮助你 – MaVRoSCy 2012-07-26 14:24:24