Java 8

Java 8 Stream – Lire un fichier ligne par ligne

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 !!