Como ler um arquivo de texto grande linha por linha em Java

Hassan Saeed 12 outubro 2023
  1. BufferedReader para ler o arquivo linha por linha em Java
  2. Stream para ler arquivo linha por linha em Java
  3. Scanner para ler arquivo linha por linha em Java
Como ler um arquivo de texto grande linha por linha em Java

Este tutorial discute métodos para ler um grande arquivo de texto linha por linha de forma eficiente em Java.

Há inúmeros métodos para ler um arquivo de texto em Java. Entretanto, este tutorial é específico para ler arquivos de texto grandes, e discutiremos os três métodos mais eficientes para ler arquivos de texto grandes rapidamente.

BufferedReader para ler o arquivo linha por linha em Java

BufferedReader na classe Java lê texto de um determinado fluxo de entrada de caracteres, buffering characters para proporcionar a leitura eficiente de caracteres, arrays e linhas. Este método proporciona uma leitura eficiente linha por linha para os arquivos de entrada com um tamanho de arquivo consideravelmente grande.

O exemplo abaixo ilustra a utilização do BufferedReader para ler um arquivo txt e emitir seu conteúdo linha por linha.

import java.io.*;

public class Main {
  public static void main(String[] args) {
    String file = "my-file.txt";
    try (BufferedReader br = new BufferedReader(new FileReader(file))) {
      String line;
      while ((line = br.readLine()) != null) {
        System.out.println(line);
      }
    } catch (IOException e) {
      System.out.println("An error occurred.");
      e.printStackTrace();
    }
  }
}

Stream para ler arquivo linha por linha em Java

Os usuários do Java 8 e acima também podem utilizar o Stream para ler grandes arquivos linha por linha. O exemplo abaixo ilustra o uso do Stream para ler um arquivo txt e emitir seu conteúdo linha por linha.

import java.io.*;
import java.nio.file.*;
import java.util.stream.*;

public class Main {
  public static void main(String[] args) {
    String file = "my-file.txt";
    try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
      stream.forEach(System.out::println);
    } catch (IOException e) {
      System.out.println("An error occurred.");
      e.printStackTrace();
    }
  }
}

Os dois métodos acima discutidos leriam o arquivo de entrada linha por linha ao invés de ler o arquivo inteiro na memória. Portanto, estes dois métodos são altamente eficientes se tivermos um arquivo enorme que não possa ser totalmente lido na memória.

Entretanto, se nossa memória for grande o suficiente para ler o arquivo de entrada por completo, podemos também tentar o método abaixo.

Scanner para ler arquivo linha por linha em Java

A classe Scanner em Java é um scanner de texto simples que pode analisar tipos e strings primitivas utilizando expressões regulares. O Scanner (fonte do arquivo) lê o arquivo completo na memória e depois o processa linha por linha.

O exemplo abaixo ilustra a utilização do Scanner para ler um arquivo txt e emitir seu conteúdo linha por linha.

import java.io.*;
import java.util.*;

public class Main {
  public static void main(String[] args) throws IOException {
    String fileName = "my-file.txt";
    Scanner scan = new Scanner(new File(fileName));
    while (scan.hasNextLine()) {
      String line = scan.nextLine();
      System.out.println(line);
    }
  }
}

Discutimos três métodos para ler um grande arquivo de texto em Java e processá-lo linha por linha. Cada método tinha algumas restrições e vantagens que devemos considerar ao decidir qual método utilizar em um determinado cenário.

Artigo relacionado - Java File