Buen manejo de excepciones en Java

Es una mala práctica de los programadores (obviamente empiezo por mi) no escribir un código que maneje las excepciones correctamente, es por eso que quiero hacer mi humilde aporte que yo estoy implementando para obtener un código mas limpio y que depues otra persona lo pueda editar sin morir en el intento.

La estructura básica que deberia tener todo método (siempre y cuando no lanc e la excepcion con throw) es la siguiente:

public static void main(String[] args) {
		 try {
			// Código  que puede dar una excepción.
		    }
			catch (IOException  e) {
			// Capturamos la excepción del tipo Entrada/Salida,
                        // o la que nosotros creamos que es mas probable.
		    }
			catch (Exception e) {
			// Capturamos cualquier otra excepción.
			}
			finally {
		    // Código que se ejecuta con o sin excepción.
		    }
}

Hay que considerar que las excepciones que lanza Java son una clase que contiene sus metodos, esto nos ayuda mucho para identificar el error y tratarlo de la forma que queramos.

El siguiente ejemplo lanza un excepción (a proposito) del tiepo Entrada/Salida (IOException) al intentar leer un archivo de texto inexistente.

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class ManejoDeExcepciones {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// Creamos un archivo inexistente.
		File f = new File("C:archivoInexistente.txt");
		BufferedReader entrada = null;
		try {
			// Intentamos leerlo.
			entrada = new BufferedReader(new FileReader(f));

		} catch (IOException e) {
			// Capturamos la excepción que sabemos que puede ocurrir.
			System.err.println("Ouch! IOException: " + e.toString());
		} catch (Exception e) {
			// Capturamos otra excepción, una nunca sabe :)
			System.err.println("Ouch! Error Desconocido: " + e.getMessage());
		}

		finally {
			System.out.println("Fin de la aplicación!");
		}

	}

}

Esto sirve mucho cuando tenemos que hacer consultas a base de datos, la excepción que lanza cuando tenemos problemas es la SQLException, que contiene un metodo getErrorCode() que nos devuelve un int con  el código de error, dependiendo del motor de base de datos, podemos saber de que se trata el error y devolver un mensaje entendible para el usuario (por ejemplo cuando una tabla no existe o se quiere eliminar una  clave foranea). Por ejemplo,  aquí puedes ver todos los código de error del motor de base de datos Oracle.

Leer archivo de texto linea por linea en Java

Este ejemplo no es para nada complicado, es una simple clase que lee un archivo de texto (.txt) y lo lee línea por línea, esto evita subir todo el contenido del archivo a memoria, si es muy grande el mismo es imposible hacerlo.

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class readText {

/**
* @param args
*/
public static void main(String[] args) {
File f = new File( "C:texto.txt" );
BufferedReader entrada;
try {
entrada = new BufferedReader( new FileReader( f ) );
String linea;
while(entrada.ready()){
linea = entrada.readLine();
System.out.println(linea);
}
}catch (IOException e) {
e.printStackTrace();
}

}
}

Manejar archivos CSV con Java

Para el que no sabe los archivos CSV son simples archivos de texto plano pero que respetan una estructura de tabla separando los valores con coma, de ahí el nombre (comma separated values). Estos archivos se usan mucho para exportar tablas como por ejemplo tablas DBF o archivos de Excel.
El temas es cuando tenemos que procesarlos con Java para hacer lo que queramos con los datos, si estás en el tema de Java seguramente pensás solucionar este problema tomando el archivo como un String y hacer un Split de la coma y guala, no está mal pero se complica cuando el .csv tiene un peso de 80 Mb :sorpresa: . Investigando por internet me encontré con un jar llamada JavaCSV la cual puedes bajar de aquí.
Luego de bajarlo su uso es muy simple, tenemos dos métodos fundamentales CsvReader para leer y CsvWriter para escribir archivos csv, vamos a ver un ejemplo de los dos:

Continuar leyendo