elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: [1]
1  Programación / Java / Re: Obtener información de varios objetos al leer archivo serializado en: 10 Febrero 2012, 13:13 pm
Hola el problema por el cual solo mostraba el ultimo objeto, era porque se abria el archivo en cada escritura y copiaba encima el nuevo objeto, para poder acceder a un objeto X por el nombre, cree un hashmap en el que en cada escritura, a cada nombre se le asocia un número empezando por el 0,  para realizar la búsqueda por nombre sobrecargue tu método  leerArchivo.
La función  hashmap.get(nombre).intValue() devuelve el entero que se asocio al crear el hashmap y como la lectura es secuencial desde que se abre el archivo lee la posición 0 objeto 0, itero las veces que sea necesarias para encontrar el objeto a mostrar.
Prueba este código tal cual está solo hice cambios en la clase Serializador, para acceder a algún dato en particular seria ser.leerArchivo("objeto.mio","Juan"); si el nombre no existe en el hasmap te lo indicara con un System.out.print. ::)


Código
  1.  
  2. import java.io.*;
  3. import java.util.HashMap;
  4. import java.util.Map;
  5.  
  6. public class Serializador{
  7. // Escribe un objecto en un archivo
  8. private ObjectOutputStream escritorArchivo = null;
  9.  
  10. // Lee un objecto que este guardado en un archivo
  11. private ObjectInputStream lectorArchivo = null;
  12.  
  13. private Map<String, Integer> hashmap = new HashMap<String, Integer>();
  14.  
  15. private static int con = 0;
  16.  
  17. // Al metodo le pasamos el objeto que queremos serializar y lo guardará en el archivo que se le especifique al FileOutputStream (en este caso "objeto.mio")
  18. public void escribirArchivo(Object objeto){
  19. try{
  20. if(escritorArchivo == null)
  21. escritorArchivo = new ObjectOutputStream(new FileOutputStream("objeto.mio"));
  22. escritorArchivo.writeObject(objeto);
  23. hashmap.put(((Contacto)objeto).getNombre(), con++);
  24. } catch(FileNotFoundException fnfex){
  25. fnfex.printStackTrace();
  26. } catch(IOException ioex){
  27. ioex.printStackTrace();
  28. }
  29. }
  30.  
  31. public Object leerArchivo(String rutaArchivo) {
  32. Contacto contacto = null;
  33. try{
  34. if(lectorArchivo == null)
  35. lectorArchivo = new ObjectInputStream(new FileInputStream(rutaArchivo));
  36. while(true){
  37. contacto = (Contacto) lectorArchivo.readObject();
  38. System.out.println(contacto.getNombre() + " " + contacto.getApellido() );
  39. }
  40. }catch(EOFException ex)
  41. {
  42. System.out.println("\nFinal de archivo");
  43. e.printStackTrace();
  44. }catch (IOException e) {
  45. e.printStackTrace();
  46. }
  47. return contacto;
  48. }
  49.  
  50. public Object leerArchivo(String rutaArchivo, String nombre) {
  51. Contacto contacto = null;
  52. int contador = 0;
  53. try{
  54. lectorArchivo = new ObjectInputStream(new FileInputStream(rutaArchivo));
  55. if(hashmap.get(nombre)!= null){
  56. int numero = hashmap.get(nombre).intValue();
  57. while(contador <= numero){
  58. contacto = (Contacto) lectorArchivo.readObject();
  59. contador++;
  60. }
  61. System.out.println(contacto.getNombre() + " " + contacto.getApellido() );
  62. }
  63. else{
  64. System.out.println("El nombre no se encuentra en el archivo");
  65. }
  66. lectorArchivo.close();
  67. }catch(EOFException ex)
  68. {
  69. System.out.println("\nFinal de archivo");
  70. e.printStackTrace();
  71. }catch (IOException e) {
  72. e.printStackTrace();
  73. }
  74.  
  75. return contacto;
  76. }
  77. }
  78.  
  79.  
2  Programación / Java / Re: Obtener información de varios objetos al leer archivo serializado en: 9 Febrero 2012, 16:34 pm
Código:
public void escribirArchivo(Object objeto){
try{
if(escritorArchivo == null)
escritorArchivo = new ObjectOutputStream(new FileOutputStream("objeto.mio"));
escritorArchivo.writeObject(objeto);
} catch(FileNotFoundException fnfex){
fnfex.printStackTrace();
} catch(IOException ioex){
ioex.printStackTrace();
}
}

public Object leerArchivo(String rutaArchivo) {
Contacto contacto = null;
try{
if(lectorArchivo == null)
lectorArchivo = new ObjectInputStream(new FileInputStream(rutaArchivo));
while(true){
contacto = (Contacto) lectorArchivo.readObject();
System.out.println(contacto.getNombre() + " " + contacto.getApellido() );
}
}catch(EOFException ex)
{
System.out.println("\nFinal de archivo");
}catch (ClassNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
return contacto;
}



Código:
import java.io.IOException;

public class Main{
public static void main(String[] args)  {
Serializador ser = new Serializador();
Contacto yo = new Contacto("Gustavo","Diaz");
Contacto prima = new Contacto("Madeline","Guzman");
Contacto yotb = new Contacto("Juan","Villanueva");

ser.escribirArchivo(yo);
ser.escribirArchivo(prima);
ser.escribirArchivo(yotb);
ser.escribirArchivo(new Contacto("Jhonny","Walker"));

ser.leerArchivo("objeto.mio");

}
}
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines