New 2 Java: Construir una Aplicación: 4.- Leer y Escribir Ficheros y Manejar Excepciones

En New2Java1, creamos la clase Divelog.java con un constructor que creaba un frame para la aplicaci�n Dive Log, un JMenu, e inicializa un objeto JTabbedPane con seis pesta�as con t�tulos. Cada pesta�a creaba un objeto de una clase contenedora. En New2Java2, dise�amos la clase Welcome.java, que aparece en el panel Welcome. En New2Java3, la clase Diver.java present� la encapsulaci�n, que ilustra como recolectamos datos del usuario y los mostramos la entrada en la pantalla a trav�s del manejo de eventos b�sico.

Esta parte 4 refuerza estos conceptos, presenta el panel Log Dives, y nos ense�a como:

  • Preparar para manejar errores.
  • Leer y escribir desde ficheros (Java I/O).
  • Usar la distribuci�n Box.
  • Usar la clase JFileChooser para nombrar nuevos ficheros.
  • Usar la clase JOptionPane para crear cajas desplegables que impriman avisos o proporcionen informaci�n.

.�Empezando

Para esta parte del tutorial, necesitamos una imagen y la clase Dives.java que crea el panel Log Dives. Podemos usar una imagen diferente a la proporcionada aqu�, pero para evitar problemas con la distribuci�n, la imagen debe tener el mismo tama�o que �sta.

Sigue estos pasos...
  1. Graba la siguiente imagen en el directorio divelog/images: gwhite.gif
    Tama�o de la imagen 299x970pixels.

O crea una imagen tu mismo, pero usa el mismo tama�o de pixels que ves arriba.

El panel Log Dives consta de varias clases:

  • Dives.java
    Crea el panel principal, que usa el controlador de distribuci�n BorderLayout e inicializa otras tres clases:
    • NorthPanel.java
      Lee un fichero en un �rea de texto. Esta clase se a�ade a la regi�n norte de Dives.java
    • CenterPanel.java
      Crea un �re de texto texto con barras de desplazamiento en la region central de Dives.java
      El bot�n Save crea una caja de di�logo JFileChooser y escribe los datos en un fichero cuyo nombre especifica el usuario.
    • WestPanel.java
      Inicializa varias clases adocionales que crean el GUI para este panel, construye un objeto dive y graba el objeto y lo lee desde un fichero.

Por ahora, crearemos clases vac�as para las tres �ltimas clases listadas arriba.

Sigue estos pasos...
  1. En tu editor de texto, crea tres ficheros, cada una con el siguiente nombre y contenido:
    • NorthPanel.java
      package divelog;
      import java.awt.*;
      import javax.swing.*;
      public class NorthPanel extends JPanel { // Opens class
      
      } // Closes class
      
    • CenterPanel.java
      package divelog;
      import java.awt.*;
      import javax.swing.*;
      public class CenterPanel extends JPanel { // Opens class
      } // Closes class
      
    • WestPanel.java
      package divelog;
      import java.awt.*;
      import javax.swing.*;
      public class WestPanel extends JPanel { // Opens class
      } // Closes class
      
  2. Graba todas las clases.
  3. Compila todas las clases, usando:
    javac NorthPanel.java
    javac WestPanel.java
    javac CenterPanel
    

En este momento, ninguna de estas clases tiene un constructor. M�s adelante definiremos constructores para ellas.

Luego, inicializamos las clases dentro del constructor de la clase Dives.java.

Sigue estos pasos...
  1. Abre Dives.java en tu editor de texto, iniciliza las clases que has creado, y luego a�ade sus identificadores al BorderLayout:
    public class Dives extends JPanel { // Opens class
    
        public Dives()    {// Opens constructor
        // Sets the layout for the page and the
        // background to white.
        setLayout(new BorderLayout());
        setBackground(Color.white);
    
         // Initializes the placeholder classes.
         NorthPanel northPanel = new NorthPanel();
         CenterPanel centerPanel = new CenterPanel();
         WestPanel westPanel = new WestPanel();
    
         // Adds class objects to panel regions.
         add("North", northPanel);
         add("West", westPanel);
         add("Center", centerPanel);
       } // Closes constructor
     }// Closes class
    
  2. Graba el fichero.

Crear una clase para inicializar otros objetos demuestra una forma de organizar un panel complejo. Esto es especialmente �til si necesitamos usar varias distribuciones diferentes. Podr�amos crear una clase enorme para todo esto, pero dividiendo el panel en varias clases podemos hacer cambios a secciones individuales sin afectar al c�digo de las otras.

El panel Log Dives est� organizado con las siguientes clases que nos ense�an especificadades de la I/O en Java:

  • NorthPanel: demuestra como leer un fichero.
  • CenterPanel: demuestra como escribir un fichero.
  • WestPanel: demuestra como leer y escribir objetos desde y hacia un fichero.

El proceso para leer y escribir desde un fichero es propenso a errores. La aplicaci�n podr�a intentar abrir un fichero que no existe, o intentar escribir un fichero que es de s�lo lectura. Pueden ir mal muchas cosas.

Antes de aprender a leer y escribir ficheros, necesitamos entender c�mo prepararnos para manejar los errores y los problemas que podr�an ocurrir.

.�Prepararnos para los Problemas

Cuando una aplicaci�n encuentra un error o una condici�n no esperada, algunas veces termina, mostrando un mensaje en la consola. En algunos casos, la aplicaci�n no arranca.

Por ejemplo, si tecleamos los siguiente en la l�nea de comandos:

javac DisplayError.java

Obtendriamos este mensaje de error, asumiento que no tenemos un fichero llamado DisplayError.java:

javac DisplayError.java
error: cannot read: DisplayError.java
1 error

El compilador no pudo encontrar el fichero nombrado e imprimi� este mensaje en la pantalla. Estos tipos de mensajes de consola no son siempre �tiles, y normalmente no querremos que la aplicaci�n termine, sino que contin�e con otro trozo de c�digo que hemos escrito. Para forzar a que una aplicaci�n haga algo en el caso de un problema, primero debemos capturar y manejar la condici�n problem�tica. El lenguaje Java tienes unas clases y una sintaxis especial para tratar con errores y problemas potenciales.

Las aplicaciones pueden generar muchos tipos de condiciones inesperadas. Por ejemplo, podr�amos querer que el usuario introdujera un int, pero �l introduce un String. El usuario podr�a solicitar el nombre de un fichero que no existe, o nuestra l�gica de programa podr�a intentar dividir por cero. Las condiciones inesperadas en una aplicaci�n son referidas como excepciones en el lenguaje Java. En otras palabras, una excepci�n es la forma de indicar una condici�n anormal en una aplicaci�n.

Los pasos para manejar dichas excepciones son los siguientes:

  1. Nuestra aplicaci�n prueba (try) un bloque de c�digo, y ocurre una condici�n inexperada o un error.
  2. El control del program es transferido o lanzado (throw) a una secci�n de c�digo espec�fica.
  3. Este bloque de c�digo especifico captura (catch) y maneja el problema.

Existen dos tipos de condiciones:

  • Errores
  • Excepciones

Los errorres indican algo fatal, como un error de fallo de memoria. Estos son dif�ciles de recuperar. Un error indica un problema serio que una aplicaci�n razonable no deber�a intentar capturar. La mayor�a de dichos errores son condiciones anormales.

Por otro lado, las excepciones indican condiciones no-fatales que normalmente podemos capturar y manejar.

Las excepciones y errores son objetos. Las clases usadas para crear los objetos son subclases de la clase Throwable. No usamos directamente la clase Throwable, sino que utilizamos una de sus subclases como Exception.

Un objeto Exception lo crea el c�digo en el punto en que ocurri� el error o condici�n. Este objeto contiene informaci�n necesaria para describir la condici�n. El objeto Exception se pasa al bloque de c�digo manejador, donde escribimos las instrucci�n que queremos que sucedan en el caso de que se produzca esta condici�n.

Por ejemplo, supongamos que creamos un fomulario para que lo rellene el usuario. Solicitamos que el ususario teclee un nombre de fichero para leerlo. Como sabemos que es posible que no exista ese nombre del fichero en el sistema de ficheros del usuario, necesitamos escribir un c�digo que capture y maneje esta condici�n. Cuando el usuario teclea un nombre de fichero que no existe, en vez de terminar el programa, escribimos c�digo que nos muestre un di�logo, dici�ndole al usuario que el fichero no existe y pregunt�ndole si se deber�a crear. Luego necesitamos escribir c�digo para manejar una respuesta Si o No. O quiz�s, queramos crear un aviso de alg�n tipo. De cualquier forma, est�mos preparados para una condici�n posible y hemos escrito c�digo para manejarla.

Hay clases m�s espec�ficas que se derivan de las clases Exception y Error. Las clases Throwable y sus subclases tienen dos constructores, uno que no toma argumentos y otro que toma un argumento String que puede utilizarse para producir un mensaje de error.

�Para prepararte para posibles condiciones, d�nde deber�as escribir el c�digo para abrir un fichero para su lectura?
 A  En una clausula catch
 B  En el m�todo main
 C  En su propia clase
 D  En una clausula try

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR

SIGUIENTE ARTÍCULO