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:
Clase main: contiene un menú por acabar.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; } }
Código:
La idea es que ahora mismo debería de poder mostrar las marcas de todos los vehículos guardados.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(); } } }
Sin embargo obtengo en la salida el primer objeto y un error:
Código:
No creo que sea muy complicado, pero no veo el fallo. 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)