Error en lectura de Fichero

Iniciado por Afsoon, 1 Septiembre 2010, 17:59 PM

0 Miembros y 1 Visitante están viendo este tema.

Afsoon

Hola buenas, estoy aprendiendo a programar en java y estoy programando un proyecto que me mando mi hermano para ir aprendiendo, pero tengo un error que mas por darle vueltas no lo consiguo  resolver, se donde es y el porque pero no encuentro solucion, aqui teneis el codigo uno es para la lectura y otro para la escritura, el de la escritura esta bien me funciona a la perfeccion, el problema es el de la lectura y es la linea entre los chekpoint(para "depurar en ejecucio") 3 y 3.5 el error

Código (java) [Seleccionar]
public List<Entidad> obtenerVariasEntidades() {
List<Entidad> entidad = new ArrayList<Entidad>();
boolean est = false;
BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
   String opc;
   try{
   while(!est)
   {
System.out.println("\t Inserte el CIF que desee buscar");
    String cif = b.readLine().trim().toUpperCase();
Persona persona;
    ObjectInputStream entrada = new ObjectInputStream(new FileInputStream(Constantes.FICHERO_PERSONAS));
System.out.println("Checkpoing entrada 3");
persona = (Persona) entrada.readObject(); //Este es el fallo lee un Object pero lo que inserte es un Array
System.out.println("Checkpoing entrada 3.5");//pero si veis mas abajo esta guardado como un Object
    while(persona != null)
    {
    if(persona.getCIF().equalsIgnoreCase(cif))
    {
    break;
    }
   
    while(persona == null)
    {
    System.out.println("\t> No hay ninguna persona guardada con ese CIF.");
    Principal.main(null);
    break;
    }
    }

System.out.println("Checkpoing entrada 4");
Entidad en = persona;
    entidad.add(en);
   
    System.out.println("¿Desea buscar otra persona?");
    opc = b.readLine().trim().toUpperCase();
    if(opc.equals("SI"))
    est = false;
    if(opc.equals("NO"))
    break;
   }
   }catch (IOException e) {
    System.err.print(e.getMessage());
} catch (ClassNotFoundException e) {
System.err.print(e.getMessage());
}
   return entidad;
}


public void escribirVariasEntidades(List<Entidad> entidades) {
entidades = new ArrayList<Entidad>();
BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
boolean est = false;
while(!est){
try{
LeerEscribirEntidad lee = new LeerEscribirEntidad(b);
Persona persona = lee.obtenerPersonaPantalla();
Entidad en = persona;
entidades.add(en);
}catch(Exception e){
System.err.println(e.getMessage());
}
try {
ObjectOutputStream salida = new ObjectOutputStream(new FileOutputStream(Constantes.FICHERO_PERSONAS));
salida.writeObject(entidades);//Aqui escribo en el archivo pero como un Object
salida.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("\t ¿Desea insertar otro cliente?");
System.out.println("\t Inserte si para otro cliente");
System.out.println("\t Inserte no para salir");
try {
String s = b.readLine().trim().toUpperCase();
if(s.equals("SI"))
est = false;
if(s.equals("NO"))
est = true;
} catch (IOException e) {
e.printStackTrace();
}
}


}


El error cuando lo ejecuto:

Checkpoing entrada 3
java.util.ArrayList cannot be cast to es.practicasJava.lecturaFicheros.modelo.Persona

PD:He consultado en la api sobre read y nada y mirando en paginas y tampoco nada

Debci

Intentas hacer un cast explicito de un array a una clase persona, y los tipos no son validos, por eso no va bien.

Saludos

Afsoon

#2
Nada no lo consiguo creo que lo estoy yo mal porque tu respuesta tiene sentido pero cuando lo intento lo hago mal, estoy probando con esto

Código (java) [Seleccionar]

List<type> <name> = (List) new Persona();

Debci

Cita de: Afsoon en  2 Septiembre 2010, 12:34 PM
Nada no lo consiguo creo que lo estoy yo mal porque tu respuesta tiene sentido pero cuando lo intento lo hago mal, estoy probando con esto

Código (java) [Seleccionar]

List<type> <name> = (List) new Persona();

es precisamente lo que no puedes hacer, como ya te he dicho el cast explicito es para objetos o datos similares por asi decirlo, si quiere convertirlo tendrás que crear un método que lo haga manualmente, osea pasando los datos de persona a un list de uno en uno, si es que persona es un almacenador de tipo vector.

Saludos

Afsoon

No, persona no es un almacenador de tipo vector, es una clase en la que se encuentra las variables que pregunta el programa para guardar en el archivo una vez que la persona se ha registrado

Debci

Cita de: Afsoon en  2 Septiembre 2010, 14:02 PM
No, persona no es un almacenador de tipo vector, es una clase en la que se encuentra las variables que pregunta el programa para guardar en el archivo una vez que la persona se ha registrado
Tiene que ser una extensión de clase list o de la clase padre de list para poder hacer ese tipo de cast.

Saludos

Afsoon

Arreglado ya puedo iterar en una lista, pero no se como hacer que se me muestre el que se esta buscando y esa solucion me soluciona algo pero me saca otro fallo, todo lo que no este registrado como una array salta una excepcion, ahora pongo el codigo de la solucion pero no se como hacer que solo me muestre el que se busca en vez de todos.

Código (java) [Seleccionar]
List lista = (List)entrada.readObject();
Iterator it = lista.iterator();

while(it.hasNext()){
Entidad e = (Entidad)it.next();
persona = (Persona) e;
System.out.println(persona.getNombre());
}


Afsoon

Se puede cerrar ya se como buscar cuando se extrae la array del fichero y al final el de varias consulta sera para extraer la array de cuando se inserta varios clientes

Debci

Cita de: Afsoon en 13 Septiembre 2010, 19:13 PM
Se puede cerrar ya se como buscar cuando se extrae la array del fichero y al final el de varias consulta sera para extraer la array de cuando se inserta varios clientes
=D

Saludos