Comment lire des fichiers en Java

Java fournit plusieurs méthodes pour lire les fichiers. Chacune de ces méthodes est appropriée pour lire différents types de fichiers dans différentes situations. Certains sont meilleurs pour lire des fichiers plus longs, d'autres sont meilleurs pour lire des fichiers plus courts, etc.

Dans ce didacticiel, nous utiliserons les classes Java suivantes pour lire les fichiers

  • BufferedReader
  • Des dossiers
  • Scanner

Tout au long du didacticiel, nous utilisons un fichier stocké dans le répertoire src répertoire où le chemin d'accès au fichier est src/file.txt.


Stockez plusieurs lignes de texte dans ce fichier avant de continuer.

Noter:Vous devez gérer correctement les erreurs lors de l'utilisation de ces implémentations pour vous en tenir aux meilleures pratiques de codage.

Lire des fichiers texte en Java avec BufferedReader

Le BufferedReader class lit un flux d'entrée de caractères. Il met en mémoire tampon les caractères dans un tampon d'une taille par défaut de 8 Ko pour rendre le processus de lecture plus efficace. Si vous souhaitez lire un fichier ligne par ligne, l'utilisation de BufferedReader est un bon choix.


BufferedReader est efficace pour lire des fichiers volumineux.

import java.io.*; public class FileReaderWithBufferedReader {
public static void main(String[] args) throws IOException{We
String file = 'src/file.txt';
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));

String curLine;
while ((curLine = bufferedReader.readLine()) != null){

//process the line as required

System.out.println(curLine);
}
bufferedReader.close();
} }

Le readline() La méthode renvoie null lorsque la fin du fichier est atteinte.

Noter:N'oubliez pas de fermer le fichier lorsque la lecture est terminée.

Lecture d'un fichier encodé UTF-8 en Java avec BufferedReader

Nous pouvons utiliser le BufferedReader classe pour lire un fichier encodé en UTF-8.

Cette fois, on passe un InputStreamReader objet lors de la création d'un BufferedReader exemple.


import java.io.*; public class EncodedFileReaderWithBufferedReader {
public static void main(String[] args) throws IOException {
String file = 'src/fileUtf8.txt';
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), 'UTF-8'));

String curLine;
while ((curLine = bufferedReader.readLine()) != null){

//process the line as you require

System.out.println(curLine);
}
} }


Utilisation de la classe Java Files pour lire un fichier

Java Files La classe, introduite dans Java 7 dans Java NIO, se compose entièrement de méthodes statiques qui opèrent sur des fichiers.

Utilisation de Files class, vous pouvez lire le contenu complet d'un fichier dans un tableau. Cela en fait un bon choix pour lire des fichiers plus petits.

Voyons comment nous pouvons utiliser la classe Files dans ces deux scénarios.

Lecture de petits fichiers en Java avec la classe Files

Le readAllLines() méthode du Files class permet de lire tout le contenu du fichier et stocke chaque ligne dans un tableau sous forme de chaînes.


Vous pouvez utiliser le Path classe pour obtenir le chemin du fichier depuis le Files la classe accepte le Path objet du fichier.

import java.io.IOException; import java.nio.file.*; import java.util.*; public class SmallFileReaderWithFiles {
public static void main(String[] args) throws IOException {
String file = 'src/file.txt';
Path path = Paths.get(file);
List lines = Files.readAllLines(path);
} }

Vous pouvez utiliser readAllBytes() pour récupérer les données stockées dans le fichier dans un tableau d'octets au lieu d'un tableau de chaînes.

byte[] bytes = Files.readAllBytes(path);

Lecture de fichiers volumineux en Java avec la classe Files

Si vous voulez lire un gros fichier avec le Files classe, vous pouvez utiliser la classe newBufferedReader() méthode pour obtenir une instance de BufferedReader class et lisez le fichier ligne par ligne en utilisant un BufferedReader.

import java.io.*; import java.nio.file.*; public class LargeFileReaderWithFiles {
public static void main(String[] args) throws IOException {
String file = 'src/file.txt';
Path path = Paths.get(file);
BufferedReader bufferedReader = Files.newBufferedReader(path);

String curLine;
while ((curLine = bufferedReader.readLine()) != null){

System.out.println(curLine);
}
bufferedReader.close();
} }


Lecture de fichiers avec Files.lines ()

Java 8 a introduit une nouvelle méthode dans la classe Files pour lire le fichier entier dans un Stream de cordes.


import java.io.IOException; import java.nio.file.*; import java.util.stream.Stream; public class FileReaderWithFilesLines {
public static void main(String[] args) throws IOException {
String file = 'src/file.txt';
Path path = Paths.get(file);
Stream lines = Files.lines(path);

lines.forEach(s -> System.out.println(s));
lines.close();
} }


Lire des fichiers texte en Java avec un scanner

Le Scanner class divise le contenu d'un fichier en parties à l'aide d'un délimiteur donné et le lit partie par partie. Cette approche est la mieux adaptée à la lecture de contenu séparé par un délimiteur.

Par exemple, le Scanner class est idéal pour lire une liste d'entiers séparés par des espaces blancs ou une liste de chaînes séparées par des virgules.

Le délimiteur par défaut de Scanner la classe est un espace blanc. Mais vous pouvez définir le délimiteur sur un autre caractère ou une expression régulière. Il dispose également de diverses méthodes suivantes, telles que next(), nextInt(), nextLine() et nextByte(), pour convertir le contenu en différents types.

import java.io.IOException; import java.util.Scanner; import java.io.File; public class FileReaderWithScanner {
public static void main(String[] args) throws IOException{
String file = 'src/file.txt';
Scanner scanner = new Scanner(new File(file));
scanner.useDelimiter(' ');

while(scanner.hasNext()){

String next = scanner.next();

System.out.println(next);
}
scanner.close();
} }

Dans l'exemple ci-dessus, nous définissons le délimiteur sur un espace et utilisons le next() méthode pour lire la partie suivante du contenu séparée par des espaces.


Lire un fichier entier

Vous pouvez utiliser le Scanner classe pour lire le fichier entier à la fois sans exécuter de boucle. Vous devez réussir “\Z” comme délimiteur pour cela.

scanner.useDelimiter('\Z'); System.out.println(scanner.next()); scanner.close(); Noter:La classe Scanner n'est pas synchronisée et, par conséquent, n'est pas thread-safe.

Conclusion

Comme vous l'avez vu dans ce didacticiel, Java propose de nombreuses méthodes parmi lesquelles vous pouvez choisir en fonction de la nature de la tâche à accomplir pour lire des fichiers texte. Vous pouvez utiliser BufferedReader pour lire de gros fichiers ligne par ligne.

Si vous souhaitez lire un fichier dont le contenu est séparé par un délimiteur, utilisez les touches Scanner classer.

Vous pouvez également utiliser Java NIO Files classe pour lire les petits et les gros fichiers.