Java leer archivo de texto

Hay muchas formas de leer un archivo de texto en Java. Veamos los diferentes métodos de lectura de archivos de texto en Java uno por uno.

Java leer archivo de texto

Hay muchas formas de leer un archivo de texto en Java. Un archivo de texto está compuesto por caracteres, por lo que podemos usar clases Reader. También hay algunas clases de utilidad para leer un archivo de texto en Java.

  1. Java leer archivo de texto usando la clase Files
  2. Leer archivo de texto en Java usando FileReader
  3. Java leer archivo de texto usando BufferedReader
  4. Usando la clase Scanner para leer un archivo de texto en Java

Ahora veamos ejemplos que muestren cómo leer un archivo de texto en Java usando estas clases.

Java lee archivos de texto usando java.nio.file.Files

Podemos utilizar la clase Files para leer todos los contenidos de un archivo en un array de bytes. La clase Files también tiene un método para leer todas las líneas a una lista de cadenas. La clase Files se introdujo en Java 7 y es útil si deseas cargar todo el contenido del archivo. Debes utilizar este método solo cuando trabajas con archivos pequeños y necesitas todo el contenido del archivo en la memoria.

String fileName = "/Users/pankaj/source.txt";
Path path = Paths.get(fileName);
byte[] bytes = Files.readAllBytes(path);
List<String> allLines = Files.readAllLines(path, StandardCharsets.UTF_8);

Lee archivos de texto en Java usando java.io.FileReader

Puedes utilizar FileReader para obtener BufferedReader y luego leer archivos línea por línea. FileReader no admite codificación y funciona con la codificación predeterminada del sistema, por lo que no es una forma muy eficiente de leer un archivo de texto en Java.

String fileName = "/Users/pankaj/source.txt";
File file = new File(fileName);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;
while((line = br.readLine()) != null){
    //procesa la línea
    System.out.println(line);
}

Java lee archivos de texto usando java.io.BufferedReader

BufferedReader es bueno si deseas leer un archivo línea por línea y procesarlos. Es útil para procesar archivos grandes y también admite codificación. BufferedReader está sincronizado, por lo que las operaciones de lectura en un BufferedReader se pueden realizar de manera segura desde varios hilos. El tamaño de búfer predeterminado de BufferedReader es de 8 KB.

String fileName = "/Users/pankaj/source.txt";
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, cs);
BufferedReader br = new BufferedReader(isr);

String line;
while((line = br.readLine()) != null){
     //procesar la línea
     System.out.println(line);
}
br.close();

Usando Scanner para leer archivos de texto en Java

Si deseas leer un archivo línea por línea o basado en alguna expresión regular de Java, Scanner es la clase que debes usar. Scanner divide su entrada en tokens utilizando un patrón delimitador, que por defecto coincide con espacios en blanco. Los tokens resultantes pueden convertirse en valores de diferentes tipos mediante los diversos métodos next. La clase Scanner no está sincronizada y, por lo tanto, no es segura para subprocesos.

Path path = Paths.get(fileName);
Scanner scanner = new Scanner(path);
System.out.println("Read text file using Scanner");
//leer línea por línea
while(scanner.hasNextLine()){
    //procesar cada línea
    String line = scanner.nextLine();
    System.out.println(line);
}
scanner.close();

Ejemplo de lectura de archivo en Java

Aquí tienes un ejemplo de clase que muestra cómo leer un archivo de texto en Java. Los métodos de ejemplo utilizan Scanner, Files, BufferedReader con soporte de codificación y FileReader.

package com.journaldev.files;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Scanner;

public class JavaReadFile {

    public static void main(String[] args) throws IOException {
        String fileName = "/Users/pankaj/source.txt";
        
        //utilizando la clase Files de Java 7 para procesar archivos pequeños, obtener datos de archivo completos
        readUsingFiles(fileName);
        
        //utilizando la clase Scanner para archivos grandes, para leer línea por línea
        readUsingScanner(fileName);
        
        //leer usando BufferedReader, para leer línea por línea
        readUsingBufferedReader(fileName);
        readUsingBufferedReaderJava7(fileName, StandardCharsets.UTF_8);
        readUsingBufferedReader(fileName, StandardCharsets.UTF_8);
        
        //leer usando FileReader, sin soporte de codificación, no eficiente
        readUsingFileReader(fileName);
    }

    private static void readUsingFileReader(String fileName) throws IOException {
        File file = new File(fileName);
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        String line;
        System.out.println("Reading text file using FileReader");
        while((line = br.readLine()) != null){
            //procesar la línea
            System.out.println(line);
        }
        br.close();
        fr.close();
        
    }

    private static void readUsingBufferedReader(String fileName, Charset cs) throws IOException {
        File file = new File(fileName);
        FileInputStream fis = new FileInputStream(file);
        InputStreamReader isr = new InputStreamReader(fis, cs);
        BufferedReader br = new BufferedReader(isr);
        String line;
        System.out.println("Read text file using InputStreamReader");
        while((line = br.readLine()) != null){
            //procesar la línea
            System.out.println(line);
        }
        br.close();
        
    }

    private static void readUsingBufferedReaderJava7(String fileName, Charset cs) throws IOException {
        Path path = Paths.get(fileName);
        BufferedReader br = Files.newBufferedReader(path, cs);
        String line;
        System.out.println("Read text file using BufferedReader Java 7 improvement");
        while((line = br.readLine()) != null){
            //procesar la línea
            System.out.println(line);
        }
        br.close();
    }

    private static void readUsingBufferedReader(String fileName) throws IOException {
        File file = new File(fileName);
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        String line;
        System.out.println("Read text file using BufferedReader");
        while((line = br.readLine()) != null){
            //procesar la línea
            System.out.println(line);
        }
        //cerrar recursos
        br.close();
        fr.close();
    }

    private static void readUsingScanner(String fileName) throws IOException {
        Path path = Paths.get(fileName);
        Scanner scanner = new Scanner(path);
        System.out.println("Read text file using Scanner");
        //leer línea por línea
        while(scanner.hasNextLine()){
            //procesar cada línea
            String line = scanner.nextLine();
            System.out.println(line);
        }
        scanner.close();
    }

    private static void readUsingFiles(String fileName) throws IOException {
        Path path = Paths.get(fileName);
        //leer archivo a matriz de bytes
        byte[] bytes = Files.readAllBytes(path);
        System.out.println("Read text file using Files class");
        //leer archivo a lista de cadenas
        @SuppressWarnings("unused")
		List allLines = Files.readAllLines(path, StandardCharsets.UTF_8);
        System.out.println(new String(bytes));
    }

}

La elección de utilizar un Scanner o BufferedReader o Files para leer un archivo depende de los requisitos de tu proyecto. Por ejemplo, si solo estás registrando el archivo, puedes usar Files y BufferedReader. Si estás buscando analizar el archivo en función de un delimitador, debes usar la clase Scanner. Antes de finalizar este tutorial, quiero mencionar acerca de RandomAccessFile. Podemos usar esto para leer archivos de texto en Java.

RandomAccessFile file = new RandomAccessFile("/Users/pankaj/Downloads/myfile.txt", "r");
String str;

while ((str = file.readLine()) != null) {
	System.out.println(str);
}
file.close();

Eso es todo para los programas de ejemplo de lectura de archivos de texto en Java.

Source:
https://www.digitalocean.com/community/tutorials/java-read-text-file