Foros del Web » Programación para mayores de 30 ;) » Java »

Guardar objeto en archivo y luego mostrar archivo

Estas en el tema de Guardar objeto en archivo y luego mostrar archivo en el foro de Java en Foros del Web. Hola, buen dia gente del foro Estoy haciendo un trabajo para la universidad y tengo un problema, me piden que cargue por teclado n cantidad ...
  #1 (permalink)  
Antiguo 22/02/2014, 12:28
Avatar de gringofer  
Fecha de Ingreso: agosto-2010
Ubicación: Córdoba, Argentina
Mensajes: 338
Antigüedad: 13 años, 8 meses
Puntos: 22
Guardar objeto en archivo y luego mostrar archivo

Hola, buen dia gente del foro

Estoy haciendo un trabajo para la universidad y tengo un problema, me piden que cargue por teclado n cantidad de objetos (ejemplares) en un archivo y luego muestre el archivo.

El problema es cuando intento mostrar el archivo no sale nada, solo figura el mensaje "Fin del archivo" pero no muestra el objeto.

Les dejo las clases para que puedan ver el codigo:

Clase Principal:

Código Java:
Ver original
  1. public class ExamenFinal {
  2.  
  3.     /**
  4.      * @param args the command line arguments
  5.      */
  6.     public static void main(String[] args) {
  7.         // TODO code application logic here
  8.         Archivo a;
  9.         Ejemplar ejemplar;
  10.         String nombre="dato1.dat",descripcion;
  11.         int codigo,tipo,origen,stock,op;
  12.         //System.out.println("Ingrese el nombre del archivo: ");
  13.         //nombre=In.readLine();
  14.        
  15.         a = new Archivo(nombre);
  16.        
  17.         System.out.println("Ingrese el codigo del ejemplar: ");
  18.         codigo=In.readInt();
  19.         while(codigo!=-1){
  20.             System.out.println("Ingrese la descripcion del ejemplar: ");
  21.             descripcion=In.readString();
  22.             System.out.println("Ingrese el tipo de ejemplar: ");
  23.             tipo=In.readInt();
  24.             System.out.println("Ingrese el origen del ejemplar: ");
  25.             origen=In.readInt();
  26.             System.out.println("Ingrese el stock del ejemplar: ");
  27.             stock=In.readInt();
  28.             ejemplar = new Ejemplar(codigo,descripcion,tipo,origen,stock);
  29.             a.addArchivo(ejemplar);
  30.             System.out.println("Ingrese el codigo del siguiente ejemplar, si desea ir al menu ingrese -1: ");
  31.             codigo=In.readInt();
  32.         }
  33.        
  34.         System.out.println("\f");
  35.         do{
  36.             System.out.println("\t\t//////MENU//////");
  37.             System.out.println("\n\t1)Mostrar los datos del archivo\n\t5)Salir\n\tIngrese una opcion: ");
  38.             op=In.readInt();
  39.             switch(op){
  40.                 case 1: System.out.println(a.mostrarArchivo());
  41.                     break;
  42.                    
  43.                 default: System.out.println("La opcion ingresada no es correcta");    
  44.             }
  45.         }while(op!=5);
  46.  
  47.     }
  48.    
  49. }

Clase Ejemplar:

Código Java:
Ver original
  1. public class Ejemplar {
  2.     private int codigo;
  3.     private String descripcion;
  4.     private int tipo;
  5.     private int origen;
  6.     private int stock;
  7.     private String origenDes[]={"Nacional","Internacional"};
  8.  
  9.     public Ejemplar(int codigo, String descripcion, int tipo, int origen, int stock) {
  10.         this.codigo = codigo;
  11.         this.descripcion = descripcion;
  12.         this.tipo = tipo;
  13.         this.origen = origen;
  14.         this.stock = stock;
  15.     }
  16.  
  17.     public int getCodigo() {
  18.         return codigo;
  19.     }
  20.  
  21.     public void setCodigo(int codigo) {
  22.         this.codigo = codigo;
  23.     }
  24.  
  25.     public String getDescripcion() {
  26.         return descripcion;
  27.     }
  28.  
  29.     public void setDescripcion(String descripcion) {
  30.         this.descripcion = descripcion;
  31.     }
  32.  
  33.     public int getTipo() {
  34.         return tipo;
  35.     }
  36.  
  37.     public void setTipo(int tipo) {
  38.         this.tipo = tipo;
  39.     }
  40.  
  41.     public int getOrigen() {
  42.         return origen;
  43.     }
  44.  
  45.     public void setOrigen(int origen) {
  46.         this.origen = origen;
  47.     }
  48.  
  49.     public int getStock() {
  50.         return stock;
  51.     }
  52.  
  53.     public void setStock(int stock) {
  54.         this.stock = stock;
  55.     }
  56.  
  57.     @Override
  58.     public String toString() {
  59.         return "Ejemplar: " + "codigo: " + codigo + "\n descripcion: " + descripcion + "\n tipo: " + tipo + "\n origen: " + origenDes[origen] + "\n stock: " + stock;
  60.     }
  61.    
  62.    
  63. }

Clase Archivo:

Código Java:
Ver original
  1. import java.io.*;
  2. import java.util.*;
  3.  
  4. /**
  5.  *
  6.  * @author Fer
  7.  */
  8. public class Archivo {
  9.     String archivo;
  10.     private FileInputStream fis=null;
  11.     private ObjectOutputStream oos=null;
  12.     private FileOutputStream fos=null;
  13.     private ObjectInputStream ois=null;
  14.    
  15.     public Archivo(String nombre){
  16.         archivo=nombre;
  17.     }
  18.    
  19.     public String cerrarEscritura(){
  20.         String r="";
  21.         try{
  22.             if(oos!=null)
  23.                 oos.close();
  24.             if(fos!=null)
  25.                 fos.close();
  26.         }catch(IOException e){
  27.             r+="Error al escribir el archivo "+e.getMessage();
  28.         }
  29.         return r;
  30.     }
  31.    
  32.     public String cerrarLectura(){
  33.         String r="";
  34.         try{
  35.             if(fis!=null)
  36.                 fis.close();
  37.             if(ois!=null)
  38.                 ois.close();
  39.         }catch(IOException e){
  40.             r+="Error al leer el archivo "+e.getMessage();
  41.         }
  42.         return r;
  43.     }
  44.    
  45.     public String addArchivo(Ejemplar o){
  46.         String r="";
  47.         try{
  48.             fos = new FileOutputStream(archivo);
  49.             oos = new ObjectOutputStream(fos);
  50.             if(o!=null)
  51.             oos.writeObject(o);
  52.         }catch(IOException e){
  53.             r+="Error al guardar el objeto "+e.getMessage();
  54.         }finally{
  55.             r+=cerrarEscritura();
  56.         }
  57.         return r;
  58.     }
  59.    
  60.     public String mostrarArchivo(){
  61.         String r="";
  62.         Ejemplar aux=null;
  63.         try{
  64.             fis = new FileInputStream(archivo);
  65.             ois = new ObjectInputStream(fis);
  66.             while(true){
  67.                aux=(Ejemplar) ois.readObject();
  68.                 r+="\n"+aux.toString();
  69.             }
  70.         }catch(IOException e){
  71.             r+="Fin del archivo";
  72.         }
  73.         catch(Exception e1){
  74.             r+="Error al mostrar el archivo "+e1.getMessage();
  75.         }finally{
  76.             r+=cerrarLectura();
  77.         }
  78.         return r;
  79.     }
  80.    
  81. }

Alguien me podria ayudar? desde ya muchas gracias!

Saludos!
__________________
Si quieres cambio verdadero, pues camina distinto...
  #2 (permalink)  
Antiguo 22/02/2014, 15:03
 
Fecha de Ingreso: mayo-2013
Ubicación: Córdoba
Mensajes: 139
Antigüedad: 11 años
Puntos: 9
Respuesta: Guardar objeto en archivo y luego mostrar archivo

Estas ignorando un posible error de entrada / salida. Si hubieras leído el error que esta tirando y no ignorarlo te darías cuenta que no implementaste serializable en la clase ejemplar.


Código Java:
Ver original
  1. catch(IOException e){
  2.             r+="Fin del archivo";
  3.         }


Código Java:
Ver original
  1. public class Ejemplar implements Serializable

Para el fin del archivo tienes que usar EOFException, no IOException.

PD: tirando AED ? :D
  #3 (permalink)  
Antiguo 23/02/2014, 17:27
Avatar de gringofer  
Fecha de Ingreso: agosto-2010
Ubicación: Córdoba, Argentina
Mensajes: 338
Antigüedad: 13 años, 8 meses
Puntos: 22
Respuesta: Guardar objeto en archivo y luego mostrar archivo

Cita:
Iniciado por cazador1992 Ver Mensaje
Estas ignorando un posible error de entrada / salida. Si hubieras leído el error que esta tirando y no ignorarlo te darías cuenta que no implementaste serializable en la clase ejemplar.


Código Java:
Ver original
  1. catch(IOException e){
  2.             r+="Fin del archivo";
  3.         }


Código Java:
Ver original
  1. public class Ejemplar implements Serializable

Para el fin del archivo tienes que usar EOFException, no IOException.

PD: tirando AED ? :D
Muchisimas gracias, ahora si funciona!

Si es para rendir AED, pasa que hace mucho tiempo que la curse y hay cosas que no me acuerdo, como lo de serializable

Veo que sos de cordoba, vas a la utn tambien?

Saludos!
__________________
Si quieres cambio verdadero, pues camina distinto...
  #4 (permalink)  
Antiguo 27/02/2014, 21:37
Avatar de gringofer  
Fecha de Ingreso: agosto-2010
Ubicación: Córdoba, Argentina
Mensajes: 338
Antigüedad: 13 años, 8 meses
Puntos: 22
Respuesta: Guardar objeto en archivo y luego mostrar archivo

Sigo teniendo problemas, me muestra solamente el ultimo objeto que agrege... y no todos los que cargue....

Saludos!
__________________
Si quieres cambio verdadero, pues camina distinto...
  #5 (permalink)  
Antiguo 28/02/2014, 08:37
 
Fecha de Ingreso: mayo-2013
Ubicación: Córdoba
Mensajes: 139
Antigüedad: 11 años
Puntos: 9
Respuesta: Guardar objeto en archivo y luego mostrar archivo

Es que cada vez que llamas al metodo addEjemplar lo que haces es agregar un ejemplar, escribiendo encima lo que sea que se encuentre, tendrias que ir cargando los ejemplares en una lista y luego insertar todos los ejemplares, o cada vez que vas a insertar uno nuevo leer el archivo sacar el contenido de este y agregar todo de nuevo con el nuevo incluido.

Te dejo unos ejemplos de los finales de AED que tengo y los miras.

https://mega.co.nz/#!QEljDCAA!34yJmC...l319tjWdqt-0sM

Etiquetas: clase, objeto, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:27.