¿Cómo puedo leer un archivo de texto grande línea por línea usando Java?

Resuelto manoj singh asked hace 13 años • 0 respuestas

Necesito leer un archivo de texto grande de alrededor de 5 a 6 GB línea por línea usando Java.

¿Cómo puedo hacer esto rápidamente?

manoj singh avatar May 03 '11 17:05 manoj singh
Aceptado

Un patrón común es utilizar

try (BufferedReader br = new BufferedReader(new FileReader(file))) {
    String line;
    while ((line = br.readLine()) != null) {
       // process the line.
    }
}

Puede leer los datos más rápido si asume que no hay codificación de caracteres. por ejemplo, ASCII-7 pero no hará mucha diferencia. Es muy probable que lo que hagas con los datos tarde mucho más tiempo.

EDITAR: Un patrón de uso menos común que evita el alcance de linelas fugas.

try(BufferedReader br = new BufferedReader(new FileReader(file))) {
    for(String line; (line = br.readLine()) != null; ) {
        // process the line.
    }
    // line is not visible here.
}

ACTUALIZACIÓN: En Java 8 puedes hacer

try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
        stream.forEach(System.out::println);
}

NOTA: Debe colocar Stream en un bloque de prueba con recursos para asegurarse de que se invoque el método #close; de ​​lo contrario, el identificador del archivo subyacente nunca se cierra hasta que GC lo haga mucho más tarde.

Peter Lawrey avatar May 03 '2011 11:05 Peter Lawrey

Mira este blog:

  • Java Leer archivo línea por línea - Tutorial de Java

Se puede especificar el tamaño del búfer o se puede utilizar el tamaño predeterminado. El valor predeterminado es lo suficientemente grande para la mayoría de los propósitos.

// Open the file
FileInputStream fstream = new FileInputStream("textfile.txt");

// Get the object of DataInputStream
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));

String strLine;

//Read File Line By Line
while ((strLine = br.readLine()) != null)   {
  // Print the content on the console
  System.out.println (strLine);
}

//Close the input stream
in.close();
Naveed avatar May 03 '2011 10:05 Naveed