Java - Lit un fichier texte ligne par ligne
Cet article couvre 3 façons de lire un fichier texte ligne par ligne:
-
Bibliothèques Java NIO -
FileChannel
pour lire les fichiers. C'est un mode non bloquant de lecture de fichiers -
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. -
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
Note
Plus deBufferedReader
examples
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:"); Listlines = 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
Java 8
Essayez ceci -Java 8
stream to read file line by line