Recuperar la última línea de un archivo de texto grande con eficiencia
Cuando se manejan archivos de texto masivos, recuperar la última línea de manera eficiente es crucial. El acceso aleatorio puede llevar mucho tiempo para archivos grandes, lo que lo hace poco práctico. En su lugar, considere estas soluciones:
Devolver la última línea que no está en blanco:
La función final a continuación recupera rápidamente la última línea que no está en blanco de un archivo sin cargar ni recorriendo todo el archivo. Busca hasta el final del archivo y lee los caracteres hacia atrás hasta que encuentra un salto de línea, luego construye y devuelve la última línea.
public String tail(File file) { // ... for (long filePointer = fileLength; filePointer != -1; filePointer--) { // ... sb.append((char) readByte); } // ... }
Devolver las últimas N líneas:
Si necesita las últimas N líneas, use la función tail2. Emplea una técnica similar, pero cuenta los saltos de línea para determinar las líneas deseadas antes de invertir y construir la salida.
public String tail2(File file, int lines) { // ... for (long filePointer = fileLength; filePointer != -1; filePointer--) { line = line 1; sb.append((char) readByte); } // ... }
Invocar y usar:
File file = new File("D:\\stuff\\huge.log"); System.out.println(tail(file)); System.out.println(tail2(file, 10));
Consideraciones Unicode:
La implementación utiliza la inversión de caracteres para reconstruir las líneas. Si bien es generalmente efectivo, esto puede causar problemas de inversión de Unicode con caracteres como acentos y sombreros. Por lo tanto, es esencial realizar pruebas exhaustivas antes de utilizar este enfoque en varios idiomas.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3