Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Afsoon en 1 Septiembre 2010, 17:59 pm



Título: Error en lectura de Fichero
Publicado por: Afsoon en 1 Septiembre 2010, 17:59 pm
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
  1. public List<Entidad> obtenerVariasEntidades() {
  2. List<Entidad> entidad = new ArrayList<Entidad>();
  3. boolean est = false;
  4.    String opc;
  5.    try{
  6.    while(!est)
  7.    {
  8. System.out.println("\t Inserte el CIF que desee buscar");
  9.     String cif = b.readLine().trim().toUpperCase();
  10. Persona persona;
  11.     ObjectInputStream entrada = new ObjectInputStream(new FileInputStream(Constantes.FICHERO_PERSONAS));
  12. System.out.println("Checkpoing entrada 3");
  13. persona = (Persona) entrada.readObject(); //Este es el fallo lee un Object pero lo que inserte es un Array
  14. System.out.println("Checkpoing entrada 3.5");//pero si veis mas abajo esta guardado como un Object
  15.     while(persona != null)
  16.     {
  17.     if(persona.getCIF().equalsIgnoreCase(cif))
  18.     {
  19.     break;
  20.     }
  21.  
  22.     while(persona == null)
  23.     {
  24.     System.out.println("\t> No hay ninguna persona guardada con ese CIF.");
  25.     Principal.main(null);
  26.     break;
  27.     }
  28.     }
  29.  
  30. System.out.println("Checkpoing entrada 4");
  31. Entidad en = persona;
  32.     entidad.add(en);
  33.  
  34.     System.out.println("¿Desea buscar otra persona?");
  35.     opc = b.readLine().trim().toUpperCase();
  36.     if(opc.equals("SI"))
  37.     est = false;
  38.     if(opc.equals("NO"))
  39.     break;
  40.    }
  41.    }catch (IOException e) {
  42.     System.err.print(e.getMessage());
  43. } catch (ClassNotFoundException e) {
  44. System.err.print(e.getMessage());
  45. }
  46.    return entidad;
  47. }
  48.  
  49.  
  50. public void escribirVariasEntidades(List<Entidad> entidades) {
  51. entidades = new ArrayList<Entidad>();
  52. boolean est = false;
  53. while(!est){
  54. try{
  55. LeerEscribirEntidad lee = new LeerEscribirEntidad(b);
  56. Persona persona = lee.obtenerPersonaPantalla();
  57. Entidad en = persona;
  58. entidades.add(en);
  59. }catch(Exception e){
  60. System.err.println(e.getMessage());
  61. }
  62. try {
  63. ObjectOutputStream salida = new ObjectOutputStream(new FileOutputStream(Constantes.FICHERO_PERSONAS));
  64. salida.writeObject(entidades);//Aqui escribo en el archivo pero como un Object
  65. salida.close();
  66. } catch (IOException e) {
  67. e.printStackTrace();
  68. }
  69. System.out.println("\t ¿Desea insertar otro cliente?");
  70. System.out.println("\t Inserte si para otro cliente");
  71. System.out.println("\t Inserte no para salir");
  72. try {
  73. String s = b.readLine().trim().toUpperCase();
  74. if(s.equals("SI"))
  75. est = false;
  76. if(s.equals("NO"))
  77. est = true;
  78. } catch (IOException e) {
  79. e.printStackTrace();
  80. }
  81. }
  82.  
  83.  
  84. }
  85.  

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


Título: Re: Error en lectura de Fichero
Publicado por: Debci en 1 Septiembre 2010, 19:12 pm
Intentas hacer un cast explicito de un array a una clase persona, y los tipos no son validos, por eso no va bien.

Saludos


Título: Re: Error en lectura de Fichero
Publicado por: 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
  1. List<type> <name> = (List) new Persona();
  2.  


Título: Re: Error en lectura de Fichero
Publicado por: Debci en 2 Septiembre 2010, 13:08 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
  1. List<type> <name> = (List) new Persona();
  2.  
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


Título: Re: Error en lectura de Fichero
Publicado por: 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


Título: Re: Error en lectura de Fichero
Publicado por: Debci en 2 Septiembre 2010, 14:54 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


Título: Re: Error en lectura de Fichero
Publicado por: Afsoon en 9 Septiembre 2010, 17:03 pm
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
  1. List lista = (List)entrada.readObject();
  2. Iterator it = lista.iterator();
  3.  
  4. while(it.hasNext()){
  5. Entidad e = (Entidad)it.next();
  6. persona = (Persona) e;
  7. System.out.println(persona.getNombre());
  8. }


Título: Re: Error en lectura de Fichero
Publicado por: 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


Título: Re: Error en lectura de Fichero
Publicado por: Debci en 14 Septiembre 2010, 18:26 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