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