RandomAccessFile es un buen lugar para comenzar, como se describe en las otras respuestas. Sin embargo, hay una advertencia importante .
Si su archivo no está codificado con una codificación de un byte por carácter, el método readLine()
no le va a funcionar. Y readUTF()
no funcionará bajo ninguna circunstancia. (Lee una cadena precedida de un recuento de caracteres ...)
En su lugar, deberá asegurarse de buscar marcadores de final de línea que respeten los límites de caracteres de la codificación. Para codificaciones de longitud fija (por ejemplo, sabores de UTF-16 o UTF-32), necesita extraer caracteres a partir de posiciones de bytes que son divisibles por el tamaño del carácter en bytes. Para codificaciones de longitud variable (por ejemplo, UTF-8), debe buscar un byte que debe ser el primer byte de un carácter.
En el caso de UTF-8, el primer byte de un carácter será 0xxxxxxx
o 110xxxxx
o 1110xxxx
o 11110xxx
. Cualquier otra cosa es un segundo/tercer byte o una secuencia UTF-8 ilegal. Ver The Unicode Standard, Version 5.2, Chapter 3.9, Tabla 3-7. Esto significa, como lo señala la discusión de comentarios, que cualquier byte 0x0A y 0x0D en una secuencia UTF-8 codificada adecuadamente representará un carácter LF o CR. Por lo tanto, contar los bytes es una estrategia de implementación válida (para UTF-8).
Después de haber identificado un límite de caracteres adecuado, puede simplemente llamar al new String(...)
pasando la matriz de bytes, desplazamiento, recuento y codificación, y luego llamar repetidamente al String.lastIndexOf(...)
para contar el final de las líneas.
Consulte también: [Java: leer con rapidez la última línea de un archivo de texto?] (Http://stackoverflow.com/questions/686231) – hippietrail