Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java文件写入期间的IOException处理_Java_File_Io - Fatal编程技术网

java文件写入期间的IOException处理

java文件写入期间的IOException处理,java,file,io,Java,File,Io,我的应用程序不断向文件写入大量字节。如果我的代码块正在写入字节,并且如果与驱动器或网络的连接丢失,则得到IOException,那么我如何知道它写入了多少字节 例如,我一次写入2500个字节,如果发生IOException,是否意味着它没有向文件写入任何内容,或者它会向文件写入部分字节?如果部分字节写入文件,我如何知道写入了多少 仅供参考,我正在使用 DataOutputStream 写出文件。只有当我的应用程序关闭时,我才会刷新。你不能,IOException可以随时发生。如果你想一想, I

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

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

仅供参考,我正在使用

DataOutputStream

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

你不能,
IOException
可以随时发生。如果你想一想,<代码> IOExux<代码>可能是由于软件或硬件故障造成的,在第一个字节被写入之前,毕竟是写入的,但是发生了一些连接,或者在中间,如果数据块相当大。

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


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

这取决于写入失败的方式,但中断异常可能是您需要的:

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

您使用什么方法写入文件?我敢肯定,像BufferedOutputStream这样的东西会给你一个与OutputStream不同的结果。你也可以检查,这也可以帮助你。这是我一直在寻找的一种异常,如果try catch有效,我会试验并报告!!谢天谢地。但这是针对每个IO操作的,如果我没有弄错的话,也不是针对整个传输……只有当线程被中断时,才会出现这种异常,而不是当存在诸如OP所询问的真实I/O问题时,才会出现这种异常。它适用于诸如套接字超时(参见子类)之类的I/O问题,因此我可以假设它也适用于文件IO。我建议通过不断写入并强制关闭文件来测试它。