Saltar la navegación

2.2.- Ejemplo I.

Icono de un ordenador. A continuación, para aprender a utilizar las excepciones, vamos a ver un ejemplo en el que como se puede ver en el siguiente código, se genera un vector de 100 elementos con valores aleatorios y posteriormente, se almacenan los valores en el fichero Salida.txt.

EscribirNumeros.java

// Nota: Este código no funciona. Es simplemente para uso educativo
import java.io.*;
import java.util.Vector;
import java.util.Random;

class EscribirNumeros {
    private Vector<Integer> numeros;
    private static final int SIZE = 100;

    public EscribirNumeros (){
        // Generamos el vector con números aleatorios
        numeros = new Vector<Integer>(SIZE);
        Random randomGenerator = new Random();

        for (int i = 0; i < SIZE; i++){
            Integer num=randomGenerator.nextInt(100);
            numeros.addElement(new Integer(num));
        }

        // Guardamos el vector en un fichero
        PrintWriter out = null; 
        System.out.println("Entrando a la zona Try");
        out = new PrintWriter(new FileWriter("Salida.txt"));
         
        for (int i = 0; i < SIZE; i++)
            out.println("Valor de: " + i + " = " + numeros.elementAt(i));

        out.close();
    }

     public static void main( String[] arg ) {
          new EscribirNumeros ();
     }
}

En la primera parte del código, donde se generan los valores aleatorios no se puede producir ningún tipo de excepción. Pero a la hora de guardar los valores en el fichero, es posible que no se pueda abrir el fichero y se produzca una excepción de entrada/salida (IOException). Otro posible fallo es al ejecutar la sentencia

numeros.elementAt(i)

es que el número de elemento solicitado (i) esté fuera del rango del vector (que es de 0 a 99). En el caso de intentar obtener un elemento que se encuentre fuera del vector se genera la excepción IndexOutOfBoundsException.

En el siguiente código vamos a tratar las dos excepciones comentadas para permitir que el código siempre se ejecute de una forma segura.

EscribirNumeros.java

import java.io.*;
import java.util.Vector;
import java.util.Random;


class EscribirNumeros {
    private Vector<Integer> numeros;
    private static final int SIZE = 100;

    public EscribirNumeros (){
        // Generamos el vector con números aleatorios
        numeros = new Vector<Integer>(SIZE);
        Random randomGenerator = new Random();

        for (int i = 0; i < SIZE; i++){
            Integer num=randomGenerator.nextInt(100);
            numeros.addElement(new Integer(num));
        }

        // Guardamos el vector en un fichero
        PrintWriter out = null;
 
        try {
            System.out.println("Entrando a la zona Try");
            out = new PrintWriter(new FileWriter("Salida.txt"));
         
            for (int i = 0; i < SIZE; i++)
                out.println("Valor de: " + i + " = " + numeros.elementAt(i));

            } catch (ArrayIndexOutOfBoundsException e) {
                System.err.println("Caught ArrayIndexOutOfBoundsException: " +e.getMessage());
            } catch (IOException e) {
                System.err.println("Caught IOException: " + e.getMessage());
            } finally {
                if (out != null) {
                    System.out.println("Cerrando el fichero");
                    out.close();
                } else {
                    System.out.println("NO se ha abierto el fichero");
                }
            }
    }

     public static void main( String[] arg ) {
          new EscribirNumeros ();
     }