viernes, 18 de febrero de 2011

Cuidado! Lectura de un fichero

Después de darle vueltas porque escribia en un fichero y no hacia correctamente la lectura, encontré la solución(con ayuda del profe claro :) ). Si nos fijamos en el código que está escrito a continuación, la variable agenda es local. Leemos los datos del fichero y los asignamos a agenda. Pero claro al ser local una vez salimos de la función desaparece y no la recuperamos. 


public static void leeFichero(Agenda agenda) throws Exception{
         FileInputStream ficheroAgenda2;
         try{
                ficheroAgenda2 = new FileInputStream("agenda.bin");
                ObjectInputStream ois = new ObjectInputStream(ficheroAgenda2);
                agenda=(Agenda) ois.readObject();
                ois.close();
          }
          catch (FileNotFoundException e){
                 e.printStackTrace();
          }
          catch (IOException e){
                 e.printStackTrace();
          }
}


La solución es bien sencilla. Simplemente lo que hacemos es devolver la agenda y recogerla en la llamada a la función. De esta forma se solucionaría el problema.



public static Agenda leeFichero() throws Exception{
         FileInputStream ficheroAgenda2;
         try{
                Agenda agenda = new Agenda();               
                ficheroAgenda2 = new FileInputStream("agenda.bin");
                ObjectInputStream ois = new ObjectInputStream(ficheroAgenda2);
                agenda=(Agenda) ois.readObject();
                ois.close();
                return agenda;          }
          catch (FileNotFoundException e){
                 e.printStackTrace();
          }
          catch (IOException e){
                 e.printStackTrace();
          }
}

y en el programa principal recogeríamos el valor de retorno:

agenda=leeFichero();

Si que a veces las cosas más fáciles... se nos escapan!

No hay comentarios:

Publicar un comentario