Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/11/2014, 06:22
yafuslae
 
Fecha de Ingreso: octubre-2012
Mensajes: 45
Antigüedad: 12 años, 2 meses
Puntos: 2
Quisiera leer todos los objetos guardados en un archivo .bin

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.