Serialización de objetos en java
Publicado por Javier (54 intervenciones) el 24/02/2016 18:40:31
Hola, tengo que crear un archivo en java y en él guardar objetos. La aplicación te pide que saques por consola un menú para crear fichero, añadir clientes, listar clientes, borrar fichero y salir de la aplicación, es decir, (si pulsas 1 crea el archivo, si pulsas 2 se añade un nuevo cliente.... etc) En la parte dónde estoy atascado es a la hora de guardar objetos en el fichero. Yo creo un objeto persona de la clase que he creado Clientes y se guardan los datos de esa persona (instancia de la clase Clientes) sin problema(nombre, nif, teléfono, dirección...). El problema es que cuando quiero volver a crear otra instancia de la clase Clientes y guardar la información, ésta se guarda pero la instancia anterior es borrada y sólo guarda los datos de la última instancia de la clase Clientes.
He visto por internet que muchos guardan los objetos un un ArrayList pero el temario de ese ejercicio no habla nada de los ArrayList por lo que intuyo que se tiene que hacer sin seguir esta manera. ¿Qué es lo que estoy haciendo mal?
Supongo que el problema tiene que ser que no creo una instancia nueva del objeto cada vez que quiero introducir un nuevo cliente, sino que cambio los valores a la misma instancia pero no sé cómo podría hacer un nuevo objeto cada vez que quiera introducir un nuevo cliente.
Os dejo el código para que lo podáis ver y decirme en dónde estoy fallando.
Clase Clientes
Clase principal
Muchas gracias.
He visto por internet que muchos guardan los objetos un un ArrayList pero el temario de ese ejercicio no habla nada de los ArrayList por lo que intuyo que se tiene que hacer sin seguir esta manera. ¿Qué es lo que estoy haciendo mal?
Supongo que el problema tiene que ser que no creo una instancia nueva del objeto cada vez que quiero introducir un nuevo cliente, sino que cambio los valores a la misma instancia pero no sé cómo podría hacer un nuevo objeto cada vez que quiera introducir un nuevo cliente.
Os dejo el código para que lo podáis ver y decirme en dónde estoy fallando.
Clase Clientes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.io.Serializable;
public class Clientes implements Serializable{
private String nif;
private String nombre;
private String telefono;
private String direccion;
private float deuda;
public String getNif(){
return nif;
}
public void setNif(String nif){
this.nif = nif;
}
public String getNombre(){
return nombre;
}
public void setNombre(String nombre){
this.nombre = nombre;
}
public String getTelefono(){
return telefono;
}
public void setTelefono(String telefono){
this.telefono = telefono;
}
public String getDireccion(){
return direccion;
}
public void setDireccion(String direccion){
this.direccion = direccion;
}
public float getDeuda(){
return deuda;
}
public void setDeuda(float deuda){
this.deuda = deuda;
}
@Override
public String toString(){
return "Nombre: "+getNombre()+", NIF: "+getNif()+", Dirección: "+getDireccion()+", Teléfono: "+getTelefono()+", Deuda: "+getDeuda();
}
}
Clase principal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import java.io.*;
public class Tarea6 {
static BufferedReader dato = new BufferedReader(new InputStreamReader(System.in));
private static File archivo =new File("clientes.dat");
public static void main (String [] args) throws ClassNotFoundException {
int opcion=1;
do{
if(opcion <1 || opcion >5)
System.err.println("Introduzca únicamente un valor entre 1 y 5");
try{
System.out.println("Menú principal");
System.out.println("1 - Crear fichero");
System.out.println("2 - Añadir cliente");
System.out.println("3 - Listar clientes");
System.out.println("4 - Borrar fichero");
System.out.println("5 - Salir de la aplicación");
System.out.println("Introduzca la opción deseada (1-6)");
opcion=Integer.parseInt(dato.readLine());
switch(opcion){
case 1:
crearArchivo();
break;
case 2:
introducirCliente();
break;
case 3:
mostrarClientes();
break;
case 4:
break;
case 5:
System.out.println("GRACIAS POR UTILIZAR LA APLICACIÓN");
break;
}
}catch (NumberFormatException nfe){
System.err.println("Sólo son válidos valores enteros entre 1 y 6");
}catch(IOException ioe){
System.err.println("Error de entrada de datos: "+ioe.getMessage());
}
}while(opcion !=5);
}
private static void crearArchivo(){
try{
if(!archivo.exists()){
archivo.createNewFile();
System.out.println("Archivo creado");
}else System.out.println("El fichero ya existe");
}catch(Exception e){
System.err.println("Error al crear archivo " + e.getMessage());
}
}
private static void introducirCliente(){
try{
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(archivo));
Clientes persona = new Clientes();
System.out.println("Introduzca el NIF del cliente: ");
persona.setNif(dato.readLine());
System.out.println("Introduzca el nombre del cliente: ");
persona.setNombre(dato.readLine());
System.out.println("Introduzca el telefono del cliente: ");
persona.setTelefono(dato.readLine());
System.out.println("Introduzca la dirección del cliente: ");
persona.setDireccion(dato.readLine());
System.out.println("Introduzca la deuda del cliente: ");
persona.setDeuda(Float.parseFloat(dato.readLine()));
oos.writeObject(persona);
oos.close();
}catch(Exception e){
System.err.println("ERROR");
}
}
private static void mostrarClientes() throws IOException, ClassNotFoundException{
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(archivo));
Object aux = ois.readObject();
System.out.println(aux);
}
}
Muchas gracias.
Valora esta pregunta


0