Java - error en lectura cannot be cast ....

   
Vista:

error en lectura cannot be cast ....

Publicado por Uri (2 intervenciones) el 20/01/2013 19:19:26
Hola,

Estoy empezando en esto del Java y tengo un ejercicio el cual me hace crear una especie de estantería multimedia.
El tema es que al compilar me sale el típico mensaje de : Error en la lectura del ficheroejerciciofinal.clasesbase.Pelicula cannot be cast to java.lang.String

y no veo donde está el problema, a ver si alguien me puede dar alguna pista... os pego aquí el código...:

package ejerciciofinal.gestor;


import ejerciciofinal.clasesbase.EstanteriaMultimedia;
import ejerciciofinal.clasesbase.Pelicula;
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.*;

public class EscrituraLecturaDeObjetosMultimedia {

// VARIABLES
private FileOutputStream fileOutPutStream;
private FileInputStream fileInPutStream;
private ObjectOutputStream escritura;
private ObjectInputStream lectura;
private String archivo;

// CONSTRUCTORES
public EscrituraLecturaDeObjetosMultimedia(String archivo) {
this.archivo = archivo;
}

// METODOS
public void escrituraObjetos(EstanteriaMultimedia estanteriaMultimedia) throws IOException {
fileOutPutStream = new FileOutputStream(archivo);
escritura = new ObjectOutputStream(fileOutPutStream);

for (int i = 0; i < estanteriaMultimedia.size(); i++) {
escritura.writeObject(estanteriaMultimedia.get(i));
}
escritura.close();
}
public ArrayList lecturaObjetos( int numObjetos) throws Exception,FileNotFoundException,IOException
{
ArrayList array = new ArrayList(numObjetos);
this.lectura = new ObjectInputStream(new FileInputStream("estanteria.dat"));
for(int i=0;i<numObjetos;i++)
{
String cadena = (String) this.lectura.readObject()+"\n";
array.add(cadena);
}
this.lectura.close();
return array;
}

public static void main(String[] args) {
String fichero;
EscrituraLecturaDeObjetosMultimedia ejercicio= new EscrituraLecturaDeObjetosMultimedia("estanteria.dat");
EstanteriaMultimedia objeto=new EstanteriaMultimedia(1);
objeto.add( new Pelicula( "algo","algos","assa","algos s" ) );
try{

ejercicio.escrituraObjetos(objeto);
}
catch(IOException e){
System.out.println("Error al escribir en el archivo"+e.getMessage());
}
try{
ArrayList array = ejercicio.lecturaObjetos(3);
System.out.println(array.toString());
}catch(FileNotFoundException f){
System.out.println("Fichero no encontrado"+f.getMessage());
}catch(Exception e){
System.out.println("Error en la lectura del fichero"+e.getMessage());
}
}
}



y la clase Pelicula tiene este código:


package ejerciciofinal.clasesbase;


public class Pelicula extends Multimedia{

private String actorPrincipal;

public Pelicula(String titulo, String autor,String duracion, String actor)
{
super( titulo, autor, duracion );

this.setActorPrincipal(actor);

}

@Override
public String toString()
{
String actores = "Protagonizado por ";

if( actorPrincipal != null ){
actores += getActorPrincipal();
}

return super.toString() + "\n" + actores;
}

public String getActorPrincipal() {
return actorPrincipal;
}

public void setActorPrincipal(String actorPrincipal) {
this.actorPrincipal = actorPrincipal;
}
}


Gracias de antemano!
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

error en lectura cannot be cast ....

Publicado por Carlos (4 intervenciones) el 29/01/2013 17:57:30
Tu problema esta aqui:

String cadena = (String) this.lectura.readObject()+"\n";

y aqui, a menos que muttimedia implemente la intefaz Serializable:

public class Pelicula extends Multimedia{

La clase ObjectInputStream lee datos binarios, no texto, asi que lo que estas recuperando es un objeto del mismo tipo que cuando lo escribiste, es decir, que si escribes un objeto Pelicula, con este metodo recuperas un objeto Pelicula (puedes comprobarlo haciedo uso del operador instanceof) y en lugar de un cast a String deberias hacer un cast a la clase Pelicula.

Tampoco necesitas hacer un metodo toString() ya que estas tratando objetos de forma binaria.

Si lo que quieres es trabajar en modo texto, deberias usar un BufferedReader y derivados para las operaciones de I/O. Si quieres seguir por la linea binaria, ten en cuenta que no es texto lo que lees y escribes
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