Ver Mensaje Individual
  #5 (permalink)  
Antiguo 02/01/2009, 05:01
garan
 
Fecha de Ingreso: enero-2009
Mensajes: 11
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Dudas con ficheros de acceso aleatorio

Bueno, escribir ya lo hace sin problemas =)

Lo que hago es simplemente crear el objeto y después empleo los descriptores que mencioné antes para realizar la escritura (que parece que no me lo hace mal) aunque parece que no me introduce salto de lineas (segun deduzco cuando quiero hacer una lectura). Mi codigo de escritura es el siguiente:

Código:
BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
**Introduccion de datos del objeto y creacion del objeto**
//Escribimos el objeto en nuestro fichero.
String ruta = "ruta del fichero";
RandomAccessFile f_objetos = new RandomAccessFile(ruta, "rw");
FileOutputStream flujoSalida = new FileOutputStream(f_objetos.getFD());
ObjectOutputStream dataOS = new ObjectOutputStream(flujoSalida);
dataOS.writeObject(m_aux);
dataOS.close();
f_medicamentos.close();
La teoria es que al realizar el dataOS.close() deberia de crearme un fin de linea... ¿o me estoy equivocando? Porque segun muestro las propiedades del objeto en mi metodo de lectura parece que estoy pisoteando mi anterior resultado.

Respecto a la lectura, parece que el metodo readObject asociado al flujo ObjectInputStream funciona sin problema. Eso si, aqui me viene una duda. Imaginemos que hay mas de un objeto en el fichero, ¿este modo seria correcto?

Código:
            
String ruta = "ruta del fichero";
RandomAccessFile f_medicamentos = new RandomAccessFile(ruta, "rw");
FileInputStream flujoEntrada = new FileInputStream(f_objetos.getFD());
ObjectInputStream dataIN = new ObjectInputStream(flujoEntrada);
int n = 0;
while (n < f_medicamentos.length()) {
          Objeto o_aux = (Objeto) dataIN.readObject();
          //Este codigo sirve para saltar al siguiente objeto
          String s_aux = m_aux.toString();
          byte [] b = s_aux.getBytes();
          int l_length = b.length;
          f_objetos.seek(l_length);
          n = n + l_length;
          System.out.println(n);
          }                    
          dataIN.close();
          f_objetos.seek(0);
          f_objetos.close();
Lo que ya no se es si hay alguna funcion asociada a los random access file que nos permita saltar a la linea siguiente una vez leido el objeto. Por eso lo hice a modo "manual" que en teoria deberia de funcionar pero que en la practica solo me muestra el ultimo (aunque puede que sea tambien error de escritura).

¿Alguna sugerencia?