Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.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.util.zip.ZipFile.close()何时抛出IOException?_Java_Zip_Ioexception - Fatal编程技术网

java.util.zip.ZipFile.close()何时抛出IOException?

java.util.zip.ZipFile.close()何时抛出IOException?,java,zip,ioexception,Java,Zip,Ioexception,在什么情况下会抛出IOException?它的方法签名表明它可以被抛出,但是从源代码来看,似乎没有任何地方会发生这种情况,除非是在本机代码中。在发现异常时,可以采取什么纠正措施(如有)?来自man close(2): 不检查close()的返回值是一个常见但严重的编程错误。前一次写入(2)操作中的错误很可能在最终关闭()时首次报告。关闭文件时不检查返回值可能会导致数据无声丢失。这在NFS和磁盘配额中尤其明显 我不确定,但我认为当以下事件之一发生时会引发IOException: zip文件已被应

在什么情况下会抛出IOException?它的方法签名表明它可以被抛出,但是从源代码来看,似乎没有任何地方会发生这种情况,除非是在本机代码中。在发现异常时,可以采取什么纠正措施(如有)?

来自man close(2):

不检查close()的返回值是一个常见但严重的编程错误。前一次写入(2)操作中的错误很可能在最终关闭()时首次报告。关闭文件时不检查返回值可能会导致数据无声丢失。这在NFS和磁盘配额中尤其明显


我不确定,但我认为当以下事件之一发生时会引发IOException:

  • zip文件已被应用程序之外的某个人/某物删除
  • 卸载/断开包含zip文件的驱动器时
更多的事件可能是原因,但这是我目前唯一能想到的两件事。

来自:

关闭此ZIP文件将关闭以前通过调用
getInputStream
方法返回的所有输入流


并抛出一个
IOException
,因此也必须抛出它。根据,如果发生I/O错误,它将抛出一个
IOException
。这不是很好的描述,但它是一个广泛的网。InputStreams可以表示来自文件系统、网络、内存等的流。InputStreams可能涉及需要刷新的缓冲区、需要关闭的套接字、需要释放的资源、需要释放的锁等。IOException可能由于各种原因而发生。

ZipFile.close()的文档上写着:

关闭此ZIP文件将关闭之前通过调用getInputStream方法返回的所有输入流。 本机
close
方法可能正在执行关闭输入流的操作

InputStream
close
方法将
IOException
作为选中的异常


最可能的原因是文件系统的空间不足,在该文件系统的底层文件系统中写入zip文件时出错。除非您能够及时确定原因并解决问题,否则您所能做的就是向用户报告情况。

关闭只读流时不能抛出,java的IO框架无法检查,因为它没有静态检查读流和写流。使用
输入流时,您是在读,而不是在写,因此,在本讨论的情况下,由于写入zip文件而导致磁盘空间不足不可能是导致
IOException
的原因。如果在read()或write()调用中引发异常,我可以理解读或写失败。但是,如果在close()上引发异常,什么失败了?但是为什么这两个条件中的任何一个都会导致关闭只读ZipFile时出错?我没有提到这些是引发异常的唯一条件。