Resultados 1 al 8 de 8

Problema de persistencia serializable en Java

Esta es una discusión para el tema Problema de persistencia serializable en Java en el foro Programación, bajo la categoría Webmasters y Programadores; Hola!! Estoy ya terminando el curso, y tenemos que hacer un proyecto en Java sobre una gestión de biblioteca, y una de las condiciones es que nos guarde las publicaciones ...
Página: 1


  1. #1
    Expertos HijackThis Avatar de Vera

    Fecha de ingreso
    10 jul, 06
    Ubicación
    Madrid (España)
    Mensajes
    2,752

    Problema de persistencia serializable en Java

    Hola!!

    Estoy ya terminando el curso, y tenemos que hacer un proyecto en Java sobre una gestión de biblioteca, y una de las condiciones es que nos guarde las publicaciones que le hemos dado de alta en un archivo .dat. (que los serialize).

    Bueno, pues teniendo ya una clase de publicaciones, y una aplicación gráfica tipo Swing, donde le estoy programando cada botón, hice un módulo de guardar fichero (write.Object) y en el main las leo (read.Object). Tengo también ArrayList donde guardo todas las publicaciones.

    El problema que tengo es que no me guarda las publicaciones, así al cerrar el programa, se me pierden, y mientras se está ejecutando, al abrir el fichero "publicaciones.dat", que lo tengo situado en el mismo paquete donde todas las clases del programa, tampoco aparece nada. Así que no se cómo ponerlo correctamente para que los datos no se pierdan y queden grabados. Os dejo esa parte del código para ver si me podéis echar una mano. Y esta vez voy a notificar los avisos vía email para poder ver las respuestas lo más rápido posible


    Código:
        public static ArrayList<Publicaciones> arraypublicaciones = new ArrayList<Publicaciones>();
    
    /* AHORA AQUÍ VIENEN LAS VENTANITAS SWING PARA QUE EL USUARIO PUEDA AÑADIR LAS PUBLICACIONES Y LUEGO LO GUARDA EN EL ARRAY. */
    
    private void guardarFichero(java.awt.event.WindowEvent evt) {                                
            try {
                Publicaciones publicacionesGuardado;
                try (FileOutputStream fosPublicaciones1 = new FileOutputStream("publicaciones.dat")) {
                    ObjectOutputStream oosPublicaciones1 = new ObjectOutputStream(fosPublicaciones1);
                    for (int i = 0; i < arraypublicaciones.size(); i++) {
                        publicacionesGuardado = arraypublicaciones.get(i);
                        oosPublicaciones1.writeObject(arraypublicaciones);
                    }
                    fosPublicaciones1.close();
                }
            } catch (IOException ioe) {
                System.out.println(ioe);
            } catch (Exception e) {
                System.out.println(e);
            }
        } 
    
    public static void main(String args[]) {
            
            try {
                Publicaciones publicacionesCargado;
                try (FileInputStream fisPublicaciones1 = new FileInputStream("publicaciones.dat")) {
                    ObjectInputStream oisPublicaciones1 = new ObjectInputStream(fisPublicaciones1);
                    while(!((publicacionesCargado = (Publicaciones) oisPublicaciones1.readObject()) == null)) {
                       arraypublicaciones.add(publicacionesCargado);
                    }
                    fisPublicaciones1.close();
                }
            } catch (IOException ioe) {
                System.out.println(ioe);
            } catch (Exception e) {
                System.out.println(e);
            }
    }
    EDITO: Perdon, se me olvidó poner que también me capta este error la excepción:

    java.io.FileNotFoundException: publicaciones.dat (El sistema no puede hallar el archivo especificado)
    Bueno, muchas gracias, y estaré muy pendiente.

    Un saludo,
    Vera.

     
     
  2. #2
    Junior Member Avatar de calvoClarkson

    Fecha de ingreso
    30 may, 12
    Mensajes
    4
    En el método de guardarFichero() estás escribiendo en el fichero el arrayPublicaciones cuando deberías escribir publicacionGuardado. Te falta cerrar los ObjectOutputStream y supongo que la clase Publicaciones implementará la interfaz Serializable no?

    Un saludo!

     
     
  3. #3
    Expertos HijackThis Avatar de Vera

    Fecha de ingreso
    10 jul, 06
    Ubicación
    Madrid (España)
    Mensajes
    2,752
    Hola calvoClarkson, agradezco tu respuesta!

    Ya he modificado el método de guardarFichero tal y como me lo has dicho. Pero no entiendo a qué te refieres con cerrar los ObjectOutputStream, porque en el código tengo esto:

    fosPublicaciones1.close();
    y según entiendo, es esta línea la que los cierra, o estoy equivocada?

    Y sí, la clase Publicaciones y todas las demás clases que tiene el programa llevan el "implements Serializable".

    Gracias,

    Un saludo.

     
     
  4. #4
    Junior Member Avatar de calvoClarkson

    Fecha de ingreso
    30 may, 12
    Mensajes
    4
    Ahí estás cerrando el fichero fosPublicaciones pero no el ObjectOutputStream. Para hacerlo, después de cerrar el fichero, añade la linea:

    oosPublicaciones1.close();

    Puede que no resuelva tu problema, pero tengo entendido que se ha de hacer así.

    Saludos!

     
     
  5. #5
    Expertos HijackThis Avatar de Vera

    Fecha de ingreso
    10 jul, 06
    Ubicación
    Madrid (España)
    Mensajes
    2,752
    Hola de nuevo, calvoClarkson, y agradezco tu respuesta!

    Añadí en el código lo que me has dicho, pero aún así no logro resolver mi problema y no se cómo se pone correctamente, así que si se te ocurre otra idea a ti o algún otro miembro, muy bienvenido sea. . Pongo el código de nuevo modificado:

    Código:
    private void guardarFichero(java.awt.event.WindowEvent evt) {                                
            try {
                Publicaciones publicacionesGuardado = null;
                try (FileOutputStream fosPublicaciones1 = new FileOutputStream("./src/publicaciones.dat")) {
                    ObjectOutputStream oosPublicaciones1 = new ObjectOutputStream(fosPublicaciones1);
                    for (int i = 0; i < arraypublicaciones.size(); i++) {
                        //publicacionesGuardado=new Publicaciones
                        //publicacionesGuardado = arraypublicaciones.get(i);
                        oosPublicaciones1.writeObject(publicacionesGuardado);
                    }
                    fosPublicaciones1.close();
                    oosPublicaciones1.close();
                }
            } catch (IOException ioe) {
                System.out.println(ioe);
            } catch (Exception e) {
                System.out.println(e);
            }
        } 
    
    public static void main(String args[]) {
            
            try {
                Publicaciones publicacionesCargado;
                try (FileInputStream fisPublicaciones1 = new FileInputStream("./src/publicaciones.dat")) {
                    ObjectInputStream oisPublicaciones1 = new ObjectInputStream(fisPublicaciones1);
                    while(!((publicacionesCargado = (Publicaciones) oisPublicaciones1.readObject()) == null)) {
                       arraypublicaciones.add(publicacionesCargado);
                    }
                    fisPublicaciones1.close();
                    oisPublicaciones1.close();
                }
            } catch (IOException ioe) {
                System.out.println(ioe);
            } catch (Exception e) {
                System.out.println(e);
            }
    Y me sigue saliendo el error:

    java.io.FileNotFoundException: .\src\publicaciones.dat (El sistema no puede encontrar el archivo especificado)
    Gracias,

    Un saludo!

     
     
  6. #6
    Junior Member Avatar de calvoClarkson

    Fecha de ingreso
    30 may, 12
    Mensajes
    4
    En el método de guardarFichero() tienes la linea "//publicacionesGuardado = arraypublicaciones.get(i);" comentada (//). Tienes que descomentarla ya que, sino, no estás dando ningún valor a publicacionesGuardado, por tanto esta escribiendo null todo el tiempo en el fichero.

    Por otra parte, el FileNotFoundException donde te lo lanza? En qué método de los dos? Supongo que en el main no? ya que si el fichero es FileOutputStream lo crea si no existe...

    Poco a poco lo solucionaremos, no te quepa duda!!

     
     
  7. #7
    Expertos HijackThis Avatar de Vera

    Fecha de ingreso
    10 jul, 06
    Ubicación
    Madrid (España)
    Mensajes
    2,752
    Hola!! Gracias por responder!!

    Ya he descomentado la línea, es que estaba probando cosillas y se me olvido quitarlo jeje. La excepción no tengo ni idea de donde me la lanza, si es el método o el main :(.

    Por lo demás, sigue igual, sin guardarme las Publicaciones que doy de alta.

    Un saludo!

     
     
  8. #8
    Expertos HijackThis Avatar de Vera

    Fecha de ingreso
    10 jul, 06
    Ubicación
    Madrid (España)
    Mensajes
    2,752
    Hola!!

    Pues deciros que al final me echaron una mano y ya pude poner bien las serializaciones.

    Si a alguien le interesa el código o cómo lo he solucionado, que postee y lo pongo.

    Un saludo y gracias de todas formas!

     
     

Temas similares

  1. Respuestas: 0
    Último mensaje: 22/05/2012, 10:34
  2. Problema Java
    Por LinkinMike en el foro Programas
    Respuestas: 1
    Último mensaje: 31/07/2009, 23:56
  3. Problema con JAVA
    Por Goliath002 en el foro Windows XP
    Respuestas: 1
    Último mensaje: 20/02/2009, 12:11
  4. Java Coult Not Create The java Virtual Machine
    Por maxicroma en el foro Windows XP
    Respuestas: 1
    Último mensaje: 26/08/2008, 21:54
  5. problema con java
    Por satgraff en el foro Programas
    Respuestas: 4
    Último mensaje: 14/04/2007, 05:39

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •