Artículos
Java

Personalizar IOException

11/May/2022

Cuando trabajamos con entradas y salidas de datos es muy probable que nos encontremos con más de una IOException. En estos casos, puede ser que la información proporcionada por el «stack trace» de la Excepción no nos de la información sobre el punto de manipulación en el cual se ha producido dicha excepción. Es por ello que vamos a ver en este artículo cómo personalizar IOException.

IOException es una excepción que se produce cuando estamos manipulando la entrada/salida de datos, ya sea por leerlos en consola, cuando accedemos a un fichero,… En estos casos siempre estaremos obligados a controlar la posibilidad de que se produzca la IOException. Para ello utilizaremos el bloque try-catch. Por ejemplo escribiremos el siguiente código para controlar la IOException en una lectura de datos por consola.

BufferedReader br;
br = new BufferedReader(new InputStreamReader(System.in));
String texto;

try{ 
  br.readLine());
} catch (IOException ioe){ 
  ioe.printStackTrace();
}

Vemos que en el caso de que se produzca la IOException lo que hemos hecho es invocar al método .printStackTrace() para volcar la traza de ejecución de la manipulación de datos, lo que nos ayudará a encontrar la línea en la que se produjo la excepción.

En este punto vamos a ver cómo podemos personalizar IOException para añadir algo más de información. Es cierto que podríamos crear una excepción personalizada que extendiese la IOException.

public class MiExcepcion extends IOException { ... }

Si bien, si no queremos manipular mucha información extra, quizás nos sea más sencillo personalizar IOException para añadir la información que necesitemos. Para ello lo que haremos será, cuando se produzca la IOException la relanzaremos mediante la sentencia throw.

try {
 ...
} catch(IOException ioe){
  throw new IOException("Error en la lectura del fichero",ioe);
}        

Vemos que lo que hacemos es crear una nueva excepción IOException, pero en este caso le añadimos un mensaje con la información personalizada que queramos y la propia excepción. Es por ello que tendremos que volver a controlarla en el método en el que la estemos utilizando. En este caso mediante la sentencia throws. Veamos cómo sería en el caso de querer leer las líneas de un fichero:

public static long numeroLineas(String fichero) throws IOException {

  long lNumeroLineas = 0;

  try{
    FileReader file = new FileReader(fichero);
    BufferedReader bf = new BufferedReader(file);
      
    while ((bf.readLine())!=null) {
      lNumeroLineas++;
    }
      
    bf.close();

  } catch(IOException ioe) { 
    throw new IOException("Error en la lectura del fichero",ioe);
  }        

  return lNumeroLineas;
}

Lógicamente el punto en el que llamemos a este método tendremos que volver a capturar la IOException. En ese punto podemos invocar al método .getMessage() para poder recuperar el texto con el que hemos personalizado la excepción.

public static void main(String[] args) {

  String fichero = "datos.txt";
  try {
    numeroLineas(fichero);
  } catch (IOException ioe) {
    System.out.println(ioe.getMessage());
    ioe.printStackTrace();
  }

}

De esta forma sencilla podremos tener una pequeña forma de personalizar IOException y añadir un mensaje adicional de información.

Código Fuente

Descárgate el código fuente de Personalizar IOException
Y si te ha gustado nuestro código fuente puedes regalarnos una estrella Star

Vídeos sobre Java

Disfruta también de nuestros artículos sobre Java en formato vídeo. Aprovecha y suscribete a nuestro canal.

Test Java

¿Te atreves a probar tus habilidades y conocimiento en Java con nuestro test?

Test Java
Suscribir
Notificar de
guest
0 Comentarios
Opiniones integradas
Ver todos los comentarios