¿En qué circunstancias se lanzaría java.util.zip.ZipFile.close() una IOException? Su firma de método indica que se puede lanzar, pero desde el código fuente no parece haber ningún lugar donde esto pueda suceder, a menos que esté en código nativo. ¿Qué acción correctiva, en caso de haber, se podría tomar en el punto donde se detecta esa excepción?cuando hace java.util.zip.ZipFile.close() arrojar IOException?
Respuesta
Desde el API docs on ZipFile.close()
:
Cerrando este archivo ZIP se cerrará todos los flujos de entrada previamente devuelto por invocaciones del método
getInputStream
.
Y InputStream.close()
emite una IOException
, por lo ZipFile.close()
tiene que tirar también. De acuerdo con el API docs for InputStream.close()
, arroja un IOException
"si se produce un error de E/S". Eso no es muy descriptivo, pero está echando una amplia red. InputStreams puede representar flujos provenientes del sistema de archivos, la red, la memoria, etc. InputStreams puede involucrar almacenamientos intermedios que necesitan ser vaciados, enchufes que deben cerrarse, recursos que deben liberarse, bloqueos que deben liberarse, etc. IOExceptions puede suceder por una variedad de razones.
De hombre cercano (2):
No comprobar el valor de retorno de cierre() es un error de programación común, pero sin embargo seria. Es muy posible que los errores en una operación previa de escritura (2) se informen primero en el cierre final(). No verificar el valor de retorno al cerrar el archivo puede provocar la pérdida silenciosa de datos. Esto se puede observar especialmente con NFS y con cuota de disco.
Al cerrar un flujo de solo lectura no se puede lanzar, el marco IO de Java no puede verificarlo ya que no tiene secuencias de lectura contra escritura estáticamente comprobadas. – Joshua
no estoy seguro, pero creo que IOException se produce cuando uno de los siguientes eventos ocurren:
- El archivo zip se eliminó por algo/alguien fuera de la aplicación.
- Cuando la unidad que contiene el archivo zip se desmonta/desconectado
Mucho más eventos podrían ser la razón pero esos son los dos únicos que podía pensar en este momento.
¿Pero por qué cualquiera de esas condiciones causaría un error al cerrar un ZipFile de solo lectura? – EJP
No mencioné que esas son las únicas condiciones para lanzar la excepción. –
La documentación para ZipFile.close()
dice:
Cerrando este archivo ZIP se cerrará todos los flujos de entrada previamente devuelto por invocaciones del método getInputStream.
Probablemente el método nativo close
está realizando el cierre de InputStreams.
El método close
de InputStream
tiene IOException
como una excepción comprobada.
La causa más probable es un
condición de falta de espacio en el sistema de archivos donde se está escribiendo el archivo zip error
en el sistema de archivos subyacente. A menos que pueda identificar la causa y solucionarla sobre la marcha, todo lo que puede hacer es informar la condición al usuario.
Al usar un 'InputStream', está * leyendo *, no * escribiendo *, por lo que quedarse sin espacio en el disco debido a que se está escribiendo un archivo zip no podría ser la causa de una' IOException' en las circunstancias de esta discusión . – Asaph
Gracias, corregido. –
- 1. 2.0 IOException
- 2. IOException: Demasiados archivos abiertos
- 3. ¿Qué excepción arrojar cuando falta un parámetro/dependencia importante?
- 4. ¿Qué excepción arrojar?
- 5. IOException vs TimeoutException
- 6. cómo lanzar una IOException?
- 7. Java: IOException al escribir en ByteArrayOutputStream?
- 8. Android Bluetooth IOException: conexión rechazada
- 9. JUnit Regla TemporaryFolder lanza arbitrariamente una IOException
- 10. Jetty IOException: Demasiados archivos abiertos
- 11. Java socket IOException - permission denied
- 12. Comprensión de IOException de Java
- 13. Cómo "arrojar" error JSF2 404?
- 14. Justificación para arrojar tipos estáticos?
- 15. Devolver después de arrojar excepciones
- 16. Java NIO: ¿Qué significa IOException: Broken pipe?
- 17. sin onclick cuando se hace clic niño
- 18. ¿Qué hace cin cuando hay un error
- 19. IOException durante la lectura de InputStream
- 20. ¿Qué arrojar al lanzar excepciones de C++?
- 21. ¿Debería este patrón regex arrojar una excepción?
- 22. Qué hacer cuando ServerSocket lanza IOException y mantiene el servidor en ejecución
- 23. ¿Qué excepciones puede arrojar una referencia de servicio generada?
- 24. Powershell: IOException try/catch no funciona
- 25. se arrastra usando Nutch ... Muestra una IOException
- 26. Force IOException durante la lectura de archivos
- 27. parcelable encontró IOException escribiendo objeto serializable
- 28. Java Try y Catch IOException Problema
- 29. IOException para unidad llena o sin espacio
- 30. IOException - No se puede cargar el archivo
Si se lanza la excepción en una llamada de lectura() o de escritura(), puedo entender que la lectura o la escritura fallaron. Pero si la excepción se lanza close(), ¿qué falló? –