java - escribir en un fichero

A vueltas con Java...

Resulta que tengo que implementar un subprograma en el que se escriba en un fichero una serie de cosas.

El caso, es que en los apuntes pone un poco como seria, de hecho lo suficiente para que funcione, pero resulta que me salta al IOException, que no puede guardar el fichero.

El codigo empleado es el siguiente, comentado segun apuntes:
    public static void salvarImagen(String pFile, TipoImagen pImagen) {
       try {
                //Abrir archivo, "Escritura", "pFile" (pFile indica donde se guarda)
          PrintWriter salida = new PrintWriter(new BufferedWriter(new FileWriter(new File(pFile))));
                //Escribir el dato P2 en salida, que seria el archivo
          salida.println("P2");
                .....
                //Cerrar archivo
          salida.close();
          System.out.println("Imagen guardada");
       }
       catch (IOException ex) {
          System.out.println("No se ha podido escribir el fichero");
       }
    }


El caso es que se carga la imagen con otro subprograma e inmediatamente se salva, pero en el de cargar se cierra el archivo.

He pensado que podia ser porque el archivo al que queria acceder no existia, y java no podia crearlo, pero parece que no, porque lo he creado yo vacio y no accede a el.

¿Alguna sugerencia?
En el catch puedes usar
ex.printStackTrace();


Para ver una traza de la pila que seguramente lanzará algún error que te ayude a descubrir el problema.
Perfecto, eso me sirvió, el problema era que como no ha explicado nada de como funcionaba la apertura de los ficheros, pues me hice un lio que gracias a eso he solucionado.
Dicho sea de paso, esa forma de 'tratar' la excepción es completamente errónea. Lo correcto (si no vas a hacer nada con la excepción) es simplemente dejarla 'subir'.

- ferdy
Ferdy escribió:Dicho sea de paso, esa forma de 'tratar' la excepción es completamente errónea. Lo correcto (si no vas a hacer nada con la excepción) es simplemente dejarla 'subir'.


No sé si lo he entendido correctamente. "Dejarla subir" significa que ese método debe ser declarado como.

    public static void salvarImagen(String pFile, TipoImagen pImagen) throws IOException{
....
}
Perdón por el 'C++-ishm'. Si, exactamente eso. Si en el propio método quieres imprimir un error haces el catch y luego la relanzas:

try { .... } catch(YadaYada e) { .... throw e; }


Aunque depende mucho de cómo quieres que funcione tu aplicación, claro.

- ferdy
Ferdy escribió:Perdón por el 'C++-ishm'. Si, exactamente eso. Si en el propio método quieres imprimir un error haces el catch y luego la relanzas:

try { .... } catch(YadaYada e) { .... throw e; }


Aunque depende mucho de cómo quieres que funcione tu aplicación, claro.

- ferdy


Muchas gracias por la aclaración :)
6 respuestas