Java - Lire un fichier texte ligne par ligne

Java - Lit un fichier texte ligne par ligne

Cet article couvre 3 façons de lire un fichier texte ligne par ligne:

  1. Bibliothèques Java NIO -FileChannel pour lire les fichiers. C'est un mode non bloquant de lecture de fichiers

  2. BufferedReader - Ce qui est une opération de blocage, c'est-à-dire qu'il bloque toute autre demande de lecture / écriture dans le fichier jusqu'à ce qu'il ait terminé la tâche.

  3. Apache Commons IO -FileUtils, un moyen plus simple de lire les fichiers ligne par ligne. C'est aussi une opération de blocage.

Le fichier d'entrée pour chaque exemple est le même que celui illustré ci-dessous:

src/com/techfou/data.txt

A
B
C
D
1
2
3

1. Bibliothèques Java NIO

L'exemple présente la manière la plus simple de lire un petit fichier. Puisqu'il s'agit d'un petit fichier, nous allouons directement la mémoire requise àByteBuffer en utilisant la taille deFileChannel.

NIOFileReadExample.java

package com.techfou;

import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class NIOFileReadExample {

    public static void main(String[] args) throws IOException {

        RandomAccessFile file = new RandomAccessFile("src/com/example/data.txt", "r");

        FileChannel channel = file.getChannel();

        System.out.println("File size is: " + channel.size());

        ByteBuffer buffer = ByteBuffer.allocate((int) channel.size());

        channel.read(buffer);

        buffer.flip();//Restore buffer to position 0 to read it

        System.out.println("Reading content and printing ... ");

        for (int i = 0; i < channel.size(); i++) {
            System.out.print((char) buffer.get());
        }

        channel.close();
        file.close();

    }

}

Lors de l'exécution du code, vous obtenez la sortie ci-dessous:

File size is: 19
Reading content and printing ...
A
B
C
D
1
2
3

2. BufferedReader

ReadTextFile.java

package com.example;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class ReadTextFile {

    public static void main(String[] args) throws IOException {

        try {

            File f = new File("src/com/example/data.txt");

            BufferedReader b = new BufferedReader(new FileReader(f));

            String readLine = "";

            System.out.println("Reading file using Buffered Reader");

            while ((readLine = b.readLine()) != null) {
                System.out.println(readLine);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

La sortie lors de l'exécution de ce code sera comme indiqué ci-dessous:

Reading file using Buffered Reader
A
B
C
D
1
2
3

3. Apache Commons IO

pom.xml

  
    commons-io
    commons-io
    2.5
  

FichierIOUtilsExample

package com.example;

import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.List;

public class ReadTextFile {

    public static void main(String[] args) throws IOException {

        try {

            File f = new File("src/com/example/data.txt");

            System.out.println("Reading files using Apache IO:");

            List lines = FileUtils.readLines(f, "UTF-8");

            for (String line : lines) {
                System.out.println(line);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

La sortie lors de l'exécution du code ci-dessus sera:

Reading files using Apache IO:
A
B
C
D
1
2
3