Foro de elhacker.net

Programación => Java => Mensaje iniciado por: nandoooo en 14 Abril 2012, 16:22 pm



Título: Excepciones en Java[Solucionado]
Publicado por: nandoooo en 14 Abril 2012, 16:22 pm
Hola!
Estoy iniciandome en Java y despues de leer algún que otro libro y tal me dispongo a hacer una aplicación que copia ficheros.

Me han pasado el siguiente código:
Código:
public class Cpl {

    public static void main (String args[]) {
      
      DataInputStream inorig;
      DataOutputStream outdst;
      final int TAMANO = 512;
      int error=0;      
      try {
         // Procesado de argumentos de entrada.        
         inorig = new DataInputStream (new FileInputStream (args[0]));
         outdst = new DataOutputStream (new FileOutputStream (args[1]));
        
         byte b[] = new byte [TAMANO];
         for(int n = 0;-1 != (n = inorig.read(b,0,TAMANO));) {
            outdst.write (b,0,n);
         }
         inorig.close();
         outdst.close();
      }
      catch (FileNotFoundException e) {
        System.err.println("Fichero no encontrado");
        error=1;
      }
      catch(IOException e) {
        System.err.println("Error en la transferencia");
        e.printStackTrace();
        error=1;
      }
      catch (IndexOutOfBoundsException e) {
        System.err.println("Uso: Cpl <fichero_origen> <fichero_destino>");
        error=1;
      }
      if(error!=0)
         System.exit(error);
    }
}
Pero claro...esto no me detecta los posibles fallos que puedan surgir, como puede ser fallos de paso de argumentos y tal...pero lo que mas me despista es algo que he visto en el javadoc:
En la clase IOException, he visto el siguiente contructor:
Código:
public IOException(String message, Throwable cause)
y me viene muy bien para detectar fallos de lectura y escritura con write y read sin usar try´s anidados, pero no consigo usarlo de forma correcta.¿Alguna idea?
Gracias!
        


Título: Re: Excepciones en Java
Publicado por: raul_samp en 15 Abril 2012, 03:39 am
En la clase IOException, he visto el siguiente contructor:
Código:
public IOException(String message, Throwable cause)
y me viene muy bien para detectar fallos de lectura y escritura con write y read sin usar try´s anidados, pero no consigo usarlo de forma correcta.¿Alguna idea?
Gracias!
       

El constructor del que hablas es un constructor heredado de Throwable (que es de donde hereda Exception) sirve para enlazar cadenas de excepciones, es decir. Cuando quieres lanzar una excepción puedes decidir usar este constructor de una manera como esta:
Código
  1. throw new IOException("Descripcion", causa);
Siendo causa un Throwable (o evidentemente algo que herede de él).

No entiendo bien cual es el problema con el código, tal y como lo tienes no hay try anidados, y el fallo de paso de argumentos lo tienes controlado con:
Código
  1.        System.err.println("Uso: Cpl <fichero_origen> <fichero_destino>");
  2.        error=1;
  3.      }

Si puedes explicar un poco mejor cual es la duda o concretar más que es lo que quieres hacer seguro que encontramos una solución.

Un saludo!


Título: Re: Excepciones en Java
Publicado por: nandoooo en 15 Abril 2012, 08:36 am
Lo primero, gracias por contestar ;D
A ver si consigo explicarme:
Ahora no ha try´s anidados pero en el código tanto el método read() como write() lanzan excepciones IOException y lo que quiero saber es en caso de fallo qué método lanzó la excepción para poder gestionarla aunque sea con un simple
Código
  1.   System.err.println("Fallo de lectura");
o
Código
  1.    System.err.println("Fallo de escritura");
Es que el tema este de las excepciones no me queda muy claro.
¿Podría hacer algo como esto?:
Código
  1. catch(IOException e) {
  2.        System.err.println("Error en la transferencia");
  3.        System.err.println("+e.cause.toString()+");
  4.        error=1;
  5.      }
  6.  


Título: Re: Excepciones en Java
Publicado por: [Case] en 16 Abril 2012, 00:59 am
La solución que a mi se me ocurre es que separes todo el campo de try en pequeños trys para poder tratar cada uno de forma diferente.


Título: Re: Excepciones en Java
Publicado por: nandoooo en 16 Abril 2012, 20:56 pm
La solución que a mi se me ocurre es que separes todo el campo de try en pequeños trys para poder tratar cada uno de forma diferente.
Es lo que iba a hacer hasta que he dado con ésto:
Código
  1. catch (IOException e) {
  2.    System.err.println("Caught IOException: " +  e.getMessage());                        
  3. }
Muchas gracias por la ayuda!