Java - Lectura de objetos en ficheros

 
Vista:
sin imagen de perfil

Lectura de objetos en ficheros

Publicado por Sergio (5 intervenciones) el 30/11/2017 20:59:39
Hola, buenas tardes-noches. Estoy haciendo un ejercicio que consiste en introducir matriculas en un fichero y luego leerlo. Pero me sale la excepcion (java.io.StreamCorruptedException)

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
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;
 
public class Leyendo implements Serializable{
 
	private static final long serialVersionUID = 82997918954626154L;
 
	public static void main(String[] args) throws IOException, ClassNotFoundException {
 
		ObjectInputStream ois = null;
		try {
			ois = new ObjectInputStream(new FileInputStream("Matriculas"));
			while(true) {
				Matricula matricula =(Matricula) ois.readObject();
				System.out.println(matricula);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			ois.close();
		}
 
	}
 
}

El código es este, he buscado soluciones pero no la veo. La clase en la que escribo los datos es esta.

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
public class Escribiendo implements Serializable{
 
	/**
	 * 
	 */
	private static final long serialVersionUID = 1079087112623194615L;
 
	public static void main(String[] args) throws IOException {
 
		File f = new File("Matriculas");
		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f, true));
		Scanner sc = new Scanner(System.in);
 
		System.out.println("Introducir matrícula");
		String entrada = sc.nextLine();
 
		while(!entrada.isEmpty()) {
		Matricula matricula = new Matricula(entrada);
		oos.writeObject(matricula);
		entrada = sc.nextLine();
		}
		sc.close();
		oos.close();
	}
}
 
class Matricula implements Serializable{
 
	private static final long serialVersionUID = -6693095405232125383L;
 
 
	private String matricula;
 
	public Matricula(String matricula) {
		this.matricula = matricula;
	}
 
	public void setMatricula(String matricula) {
		this.matricula = matricula;
	}
 
	@Override
	public String toString() {
		return "Matricula [matricula=" + matricula + "]";
	}
 
}

No veo donde está el error sinceramente, también es verdad que no comprendo del todo el funcionamiento de las clases objectinput y objectoutput

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 358
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Lectura de objetos en ficheros

Publicado por Nicolas (137 intervenciones) el 05/12/2017 01:56:03
Hola Sergio.
Veo que en ningún momento indicas la Rita de tu archivo ni el tipo que es. Solo pones Matrículas. Debería ser algo como “C:\prueba\Matriculas.txt”
Espero te sea de ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Lectura de objetos en ficheros

Publicado por Sergio (5 intervenciones) el 06/12/2017 10:42:23
No, eso es igual, si no pones la direccion especifica se crea en un lugar por defecto que suele ser la carpeta de workspace. El problema no era ese, al final lo encontre. El problema estaba en el metodo writeStreamHeader() de la clase objectoutputstream, hay que sobreescribirlo para que despues de escribir por primera vez, las siguientes veces no escriba una cabecera. Algo asi

protected void writeStreamHeader(){

}

Dejando el método vacío.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar