Hola.
Estoy intentando leer todos los objetos de tipo vehículo que anteriormente he guardado en un archivo .bin.
El caso es que solo consigo leer uno y no encuentro la manera de se muestren todos.
Pongo el código para que se entienda mejor.
Clase vehiculo:
Código:
public class vehiculo implements java.io.Serializable{
//Variables
private String marca;
private String modelo;
private int potencia;
private String matricula;
private String color;
//Constructor
public vehiculo(){
}
public vehiculo(String marca, String modelo, int potencia,
String matricula, String color) {
super();
this.marca = marca;
this.modelo = modelo;
this.potencia = potencia;
this.matricula = matricula;
this.color = color;
}
//Getters & setters
public String getMarca() {
return marca;
}
public void setMarca(String marca) {
this.marca = marca;
}
public String getModelo() {
return modelo;
}
public void setModelo(String modelo) {
this.modelo = modelo;
}
public int getPotencia() {
return potencia;
}
public void setPotencia(int potencia) {
this.potencia = potencia;
}
public String getMatricula() {
return matricula;
}
public void setMatricula(String matricula) {
this.matricula = matricula;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
Clase main: contiene un menú por acabar.
Código:
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Scanner;
public class main {
public static int option() {
Scanner scanner = new Scanner(System.in);
int opt = scanner.nextInt();
// System.out.println(opt);
return opt;
}
public static void menu() throws IOException {
boolean exit = false;
do {
System.out.println("Selecciona una opcion (solo números 1-3)");
System.out.println("1-Insertar nuevo coche");
System.out.println("2-Mostrar lista de coches");
System.out.println("3-Salir");
switch (option()) {
case 1:
// Insertar nuevo coche
System.out.println("Define la marca");
vehiculo coche=new vehiculo();
Scanner scanner = new Scanner(System.in);
String marca = scanner.next();
coche.setMarca(marca);
System.out.println("Define el modelo");
String modelo = scanner.next();
coche.setModelo(modelo);
System.out.println("Define la potencia");
int potencia = scanner.nextInt();
coche.setPotencia(potencia);
System.out.println("Define la matrícula");
String matricula = scanner.next();
coche.setMatricula(matricula);
System.out.println("Define el color");
String color = scanner.next();
coche.setColor(color);
setVehiculo(coche);
break;
case 2:
// Mostrar lista de coches
break;
case 3:
// Salir
exit = true;
break;
default:
System.out.println("Nothing to do here");
}
} while (exit == false);
}
//Graba en el fichero .bin
public static void setVehiculo(vehiculo vehiculo) throws IOException{
FileOutputStream fos = new FileOutputStream("fichero.bin",true);
ObjectOutputStream out = new ObjectOutputStream(fos);
out.writeObject(vehiculo);
out.close();
}
public static void main(String[] args) throws IOException, ClassNotFoundException {
// TODO Auto-generated method stub
menu();
FileInputStream fis = new FileInputStream("fichero.bin");
try {
ObjectInputStream in = new ObjectInputStream(fis);
while (true) {
vehiculo vehiculo;
try {
vehiculo = (vehiculo) in.readObject();
} catch (EOFException e) {
System.out.println(e);
break;
}
System.out.println(vehiculo.getMarca());
}
} finally {
fis.close();
}
}
}
La idea es que ahora mismo debería de poder mostrar las marcas de todos los vehículos guardados.
Sin embargo obtengo en la salida el primer objeto y un error:
Código:
Seat
Exception in thread "main" java.io.StreamCorruptedException: invalid type code: AC
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1379)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
at main.main(main.java:86)
No creo que sea muy complicado, pero no veo el fallo.