Dans ce post, je donne l’exemple d’une tâche très utile dans la programmation au jour le jour c.-à-d. la lecture d’un fichier ligne par ligne à l’aide de java IO. Avant d’aller de l’avant, permettez-moi de décrire la fonction Files.lines :
Dans Java 8, vous pouvez utiliser la méthode Files.lines pour lire le fichier en mode flux, cette fonction permet de lire facilement toutes les lignes d’un fichier ligne par ligne. Octets du fichier sont décodées en caractères à l’aide de l’encodage UTF-8.
Cette méthode fonctionne comme si l’invoquant étaient équivalentes à l’évaluation de l’expression suivante :
Files.lines(path, StandardCharsets.UTF_8)
Paramètres :
path – le chemin vers le fichier
renvoie :
les lignes du fichier comme un flux
throws :
IOException – si une erreur d’E/S survient à l’ouverture du fichier
SecurityException – Dans le cas de fournisseur par défaut, et un gestionnaire de sécurité est installé, la méthode checkRead est invoquée pour contrôler l’accès en lecture au fichier.
En passe maintenant à un exemple d’utilisation simple, Mais d’abord permettez-moi de mentionner le contenu du fichier que je vais lire dans tous les exemples présentés dans ce poste :
Lundi Mardi Mercredi Jeudi Vendredi Samedi Dimanche
1. Lecture simple d’un fichier texte en java 8
package com.programmationfacile.java8;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Stream;
public class ReadFileJava8 {
public static void main(String args[]) {
String fileName = "c://jours.txt";
try (Stream stream = Files.lines(Paths.get(fileName))) {
stream.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Sortie :
Lundi Mardi Mercredi Jeudi Vendredi Samedi Dimanche
2. Utilisation de Stream + Files.lines + Filtration
Dans cet exemple, je vais lire le contenu du fichier ligne par ligne et vérifier si une ligne contient le mot « edi » puis l’imprimer.
cette fois-ci, on va l’utiliser dans une fonction dédiée :
private static void searchForEdi() throws IOException
{
Stream lines = Files.lines(Paths.get("c://jours.txt"));
Optional hasEdi = lines.filter(s -> s.contains("edi")).findFirst();
if(hasEdi.isPresent()){
System.out.println(hasEdi.get());
}
//Fermer le flux
lines.close();
}
Sortie :
Mercredi Vendredi Samedi
C’est tout pour ce poste.
Bon apprentissage !!