�D�nde deber�as escribir el c�digo para abrir un fichero?
El c�digo para abrir un fichero deber�a ir en una clausula try. El c�digo para manejar las excepciones que se puedieran lanzar deber�a ir en una clausula catch.
Por ejemplo: try { // C�digo que abre el fichero para lectura } catch (Exception e) { // C�digo que se ejecuta si se lanza una excepci�n, // como si el nombre del fichero no existe, por ejemplo. }
�Manejar Excepciones
Las clases que manejan errores y excepciones son objetos de las clases Error o Exception para condiciones o errores generales, o m�s precisamente, una de sus subclases para condiciones m�s espec�ficas.
La imagen de abajo muestra el �rbol de herencia de la clase Throwable, y lista unas cuantas subclases de Error y Exception. Hay muchas m�s subclases que las listadas aqu�, pero el diagrama demuestra la idea general.
�C�mo sabemos qu� clases capturar? No necesitamos memorizar esas clases. Hay unas pocas reglas para descubrir qu� clase necesitamos capturar y posiblemente manejar en nuestras aplicaciones:
- Buscar las clases y m�todos que est�mos usando en nuestro c�digo en la Documentaci�n del API Java .
- Familiarizarnos con todas las clases Java.
- No intentar capturar las condiciones, y permitir que el compilador nos diga qu� clases capturar y manejar.
El �ltimo punto de la lista es la forma m�s f�cil y com�n de determinar qu� clase o clases capturar. Si llamamos a m�todos de una clase que lanza una excepci�n, el compilador mostrar� un mensaje que nos permitir� conocerlas.
Por ejemplo, cuando escribimos c�digo para leer un fichero y cerrarlo, podr�amos generar un mensaje de error como �ste: NorthPanel.java:58: unreported exception java.io.I/OException; must be caught or declared to be thrown br.close(); ^ 1 error
Adem�s de decirnos que tipo de excepci�n necesitamos capturar, el compilador nos dice qu� m�todo est� causando el problema. en este caso, se debe capturar I/OException, y el m�todo que lanza este tipo de objeto excepci�n es close. En este c�digo la variable se refiere a la clase BufferedReader. En la documentaci�n espec�fica del m�todo close para clase BufferedReader dice: Throws: I/OException - If an I/O error occurs
Despu�s de trabajar un tiempo con las clases Java, te familiarizar�s con las clases que necesitan ser capturadas y manejadas, y cuales podemos declarar como lanzadas, lo que aprenderemos m�s adelante.
Ahora que sabemos qu� tipo de objeto error o excepci�n necesitamos capturar:
- Escribimos el c�digo que queremos probar (try).
- Capturamos (catch) el objeto error o excepci�n.
- Escribimos instrucciones para ver c�mo la aplicaci�n maneja esa condici�n dentro del bloque catch.
En otras palabras, situamos el c�digo que puede lanzar una excepci�n en una clausula try, y luego capturamos cualquier excepci�n que podr�a ser lanzada en una o m�s clausulas catch.
Por ejemplo, aqu� definimos un m�todo que contiene c�digo que podr�a hacer que ocurriera alguna excepci�n. Supongamos que queremos leer un fichero. El pseudo-c�digo demuestra: public void doReadMethod() { try { // Open try clause C�digo que intenta leer un fichero particular } // Close try clause // Si hay un problema se lanza una excepci�n: catch (IOException ioe) { //Open catch System.out.println("Se ha lanzado una excepci�n: " + ioe); } // Close catch }
La clausula catch s�lo imprime informaci�n sobre la excepci�n en la salida est�ndar. Podemos hacer que haga algo m�s, como mostrar una caja de di�logo que ofrezca al usuario instrucciones de lo que hacer. Veremos un ejemplo de esto m�s adelante.
Hay m�s cosas en el manejo de excepciones, pero para esta clases y para la lectura y escrituras b�sicas en un fichero, estos fundamentos son suficientes por ahora.
�Entrada y Salida en Java
Ahora que hemos entendido lo b�sico sobre c�mo se crean, se lanzan y se manejan los objetos error y excepci�n, podemos ir a leer y escribir ficheros..
El paquete java.io soporta transferencia de datos entre una aplicaci�n y la consola, un fichero o la red. Importamos este paquete en las aplicaciones que necesitan leer o escribir datos a un sistema de ficheros.
Hasta hora hemos ejemplarizado o creado objetos para todo en esta aplicaci�n, desde los botones a los campos de texto, las acciones y los eventos. Leer y escribir ficheros tambi�n implica objetos, especificamente objetos llamados streams. Podemos pensar en los streams como puentes. Un final del puente es el objeto punto de entrada y el otro final es el objeto destino. El puente es el objeto que usa un veh�culo para cruzar de un lado a otro del rio. Los streams sirven una funci�n similar.
La plataforma Java incluye dos �rboles de clases que soportan streams:
- Entrada y salida orientada a bytes.
- Entrada y salida orientada a caracteres.
En el uso de streams, los caracteres y bytes se leen o escriben en orden secuencial, caracter a caracter o byte a byte. Como la clase NorthPanel lee un fichero, esta secci�n del tutorial se enfoca en los streams basados en caracteres. Aprenderemos sobre los streams orientados a bytes m�s adelante en una secci�n sobre como escribir objetos a ficheros, serializarlos, y leerlos dentro de un GUI.
Los streams de caracteres pueden trabajar sobre entrada y salida y convertir cada caracter desde el esquema de codificaci�n de un sistema operativo nativo a conjunto de caracteres Unicode usado por la plataforma Java y que soporta una internacionalizaci�n completa.
Leer desde un fichero requiere tres pasos b�sicos:
- Asociar el fichero con un objeto File. (Esto no es obligatorio, pero podr�a ser �til). Al menos suministamos el nombre de fichero o directorio como un String.
- Asociar el objeto File con un stream de entrada.
- Pasar a trav�s de cada caracter o l�nea del stream de caracteres.
Lo que hagamos con los caracteres es cosa nuestra. Podemos enviarlos a la consola, mostrarlos en un GUI, o escribirlos en un fichero o base de datos. Los pasos de arriba implican clases que tambi�n requieren manejo de excepciones.
Al igual que creamos otros objetos, creamos un objeto stream ejemplarizando una de sus muchas clases. Primero, podr�amos necesitar informaci�n sobre el ficheros que queremos leer, como si el fichero existe o cuando fue la �ltima vez que se modific�. Para realizar chequeos sobre un fichero o directorio, asociamos el fichero con un ejemplar de la clase File: File f = new File("myfile.txt");
Un objeto File es una representaci�n abstracta de los paths de fichero y directorio, y tiene m�todos �tiles para hacer chequeos de un fichero, o incluso crear un fichero o directorio seg�n sea necesario. Aqu� tenemos unos pocos:
- canRead()
Comprueba si la aplicaci�n puede leer el fichero denotado por su path abstracto. - createNewFile()
Crea autom�ticamente un nuevo fichero vac�o con el nombre del path abstracto si y s�lo si no existe un fichero con ese nombre. - delete()
Borra el fichero o directorio denotado por su path abstracto. - exists()
Comprueba si existe el fichero denotado por su path abstracto. - getAbsolutePath()
Devuelve el path absoluto del path abstracto. - isFile()
Comprueba si el fichero denotado por el path abstracto es un fichero normal. - mkdir()
Crea el directorio llamado por este path abstracto. - setLastModified(long time)
Selecciona la fecha de �ltima modificaci�n del fichero o directorio nombrado por su path abstracto.
Queremos leer un fichero en nuestra aplicaci�n, pero primero queremos chequear si puede leerse. Asumiendo que hemos asociado el nombre del fichero con un objeto File llamado f, �c�mo chequeamos si se puede leer el fichero? |
---|