Java – Lo que arroja una IOException

java.io.IOException parece ser el tipo más común de excepción, coincidentemente, parece ser también el más ambiguo. Sigo viendo los throws IOException escribir con sockets, archivos, & c. En realidad, nunca me han disparado, así que me pregunto qué se supone que debe disparar la excepción. La documentación no es muy útil para explicar lo que está sucediendo:

Señala que se ha producido una excepción de E / S de algún tipo. Esta clase es la clase general de excepciones producidas por operaciones de E / S fallidas o interrumpidas.

¿Puede alguien explicar por favor algunas instancias en las que se lanzará una IOException o cómo se supone que se utilizará?

Asume que eras:

  1. Leyendo un archivo de red y desconectado.
  2. Lectura de un archivo local que ya no estaba disponible.
  3. El uso de alguna secuencia para leer datos y algún otro proceso cerró la transmisión.
  4. Intenta leer / escribir un archivo pero no tiene permiso.
  5. Intentando escribir en un archivo, pero el espacio en el disco ya no estaba disponible.

Hay muchos más ejemplos, pero estos son los más comunes, en mi experiencia.

En general, E / S significa entrada o salida . Esos métodos arrojan la IOException cuando una operación de entrada o salida falla o es interpretada. Tenga en cuenta que esto no se lanzará para leer o escribir en la memoria ya que Java lo manejará automáticamente.

Aquí hay algunos casos que resultan en IOException .

  • Lectura desde un flujo de entrada cerrado
  • Intenta acceder a un archivo en Internet sin una conexión de red

La documentación de Java es útil para conocer la causa raíz de una particular IOException

Solo eche un vistazo a las subinterfaces direct known sub-interfaces de IOException desde la página de documentación:

ChangedCharSetException, CharacterCodingException, CharConversionException, ClosedChannelException, EOFException, FileLockInterruptionException, FileNotFoundException, FilerException, FileSystemException, HttpRetryException, IIOException, InterruptedByTimeoutException, InterruptedIOException, InvalidPropertiesFormatException, JMXProviderException, JMXServerErrorException, MalformedURLException, ObjectStreamException, ProtocolException, RemoteException, SaslException, SocketException, SSLException, SyncFailedException, UnknownHostException, UnknownServiceException, UnsupportedDataTypeException, UnsupportedEncodingException, UserPrincipalNotFoundException, UTFDataFormatException, ZipException

La mayoría de estas excepciones se explican por sí mismas.

Pocas IOExceptions con causas raíz:

EOFException : indica que un final de archivo o fin de flujo se ha alcanzado de forma inesperada durante la entrada. Esta excepción se usa principalmente por las secuencias de entrada de datos para señalizar el final de la secuencia

SocketException : Lanzado para indicar que hay un error al crear o acceder a un Socket.

RemoteException : una RemoteException es la superclase común para una serie de excepciones relacionadas con la comunicación que pueden ocurrir durante la ejecución de una llamada a un método remoto. Cada método de una interfaz remota, una interfaz que amplía java.rmi.Remote, debe incluir RemoteException en su cláusula throws.

UnknownHostException : Lanzada para indicar que no se pudo determinar la dirección IP de un host. (Puede que no estés conectado a internet)

MalformedURLException : lanzado para indicar que se ha producido una URL mal formada. O bien no se pudo encontrar un protocolo legal en una cadena de especificación o no se pudo analizar la cadena.