Foros del Web » Programación para mayores de 30 ;) » Java »

Lectura aleatoria de un fichero java

Estas en el tema de Lectura aleatoria de un fichero java en el foro de Java en Foros del Web. Hola a todos , he conseguido la lectura de datos de un fichero en java @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Java: Ver original public class Principal { ...
  #1 (permalink)  
Antiguo 17/05/2014, 10:04
 
Fecha de Ingreso: noviembre-2010
Mensajes: 156
Antigüedad: 13 años, 4 meses
Puntos: 0
Lectura aleatoria de un fichero java

Hola a todos , he conseguido la lectura de datos de un fichero en java

Código Java:
Ver original
  1. public class Principal {
  2.  
  3.     public static void main(String[] args) {
  4.  
  5.         try {
  6.             File f = new File("fichero1.txt");
  7.  
  8.             FileReader fr = new FileReader(f);
  9.             BufferedReader br = new BufferedReader(fr);
  10.  
  11.             String linea = "";
  12.             System.out.println("El contenido del fichero es: ");
  13.  
  14.             while ((linea = br.readLine()) != null) {
  15.  
  16.                 System.out.println(linea);
  17.             }
  18.  
  19.             br.close();
  20.             fr.close();
  21.  
  22.         } catch (Exception e) {
  23.             System.out.println(e);
  24.  
  25.         }
  26.     }
  27. }

La clásica de toda la vida vamos , lo que me interesaría saber ahora es como puedo mostrar únicamente un registro de forma aleatoria? , porque lo he intentado con el random acces file y nada ..
  #2 (permalink)  
Antiguo 17/05/2014, 10:15
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Lectura aleatoria de un fichero java

RandomAccessFile sirve si sabes calcular la posición en bytes en la que empieza cada registro. Como estás leyendo con readLine() entiendo que los registros son líneas. Así que RandomAccessFile te puede valer si sabes en qué byte empieza cada línea. Esto sólo es fácil de calcular si las líneas son todas de la misma longitud, o si tienes algún tipo de regla para calcularlo.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 17/05/2014, 13:11
 
Fecha de Ingreso: noviembre-2010
Mensajes: 156
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Lectura aleatoria de un fichero java

Buenas ! Lo que tengo es un registro por cada linia , independientemente de la longitud de cada uno , me gustaría guardar en una variable un registro aleatorio del fichero de texto.
  #4 (permalink)  
Antiguo 17/05/2014, 14:15
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Lectura aleatoria de un fichero java

Como te he comantado, si las líneas no son de igual longitud, no puedes acceder directamente al registro sin leer los anteriores primero. Debería leer consecutivamente y tirar todas las líneas hasta llegar a la que te interese y guardarla.

Si tienes control del fichero, puedes rellenar cada línea artificialmente con espacios al final hasta que tengan una longitud fija, todas igual. Entonces con RandomAccessFile sí podrías acceder, tanto lectura como escritura, a un registro concreto de golpe, sin leer todos los anteriores.

Sin rellenar con espacios en blanco, existen mecanismos más complejos, como mantener un segundo fichero de índice, pero no merece la pena salvo que vayas a andar haciendo muchos accesos aleatorios muy seguidos. La idea sería leer el fichero entero una vez, guardando en otro fichero o en memoria en qué byte exacto empieza cada línea. De esta forma, con RandomAccessFile y sabiendo la posición del byte exacto de empiece de la línea puedes acceder a ella directamente. Si este fuera el caso, deberías plantearte el uso de una base de datos.

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Etiquetas: aleatoria, fichero, lectura, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:35.