Bonjour,

En utilisant la "nouvelle" API Stream de Java 8, je suis tombé sur un cas d'utilisation où je n'ai pas trouvé de documentation, mais qu'il me semble important de traiter correctement. A savoir la sauvegarde d'un Stream<String> dans un fichier.

J'ai bien une version fonctionnelle, mais celle-ci me semble être purement bancale dans la gestion des erreurs.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package org.k.developpez.forum;
 
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
 
public class Test {
 
	public static void main(String[] args) throws IOException {
		LineConsumer lineConsumer =  new LineConsumer("OutputFile.txt");
		// On filtre les lignes contenant le text qu'on veux depuis le fichier de base
		Files.lines(Paths.get("InputFile.txt"), Charset.defaultCharset())
				.filter(line -> line.contains("Enregistrement technique"))
				.forEach(lineConsumer);
		lineConsumer.close();
	}
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package org.k.developpez.forum;
 
import java.io.FileWriter;
import java.io.IOException;
import java.util.function.Consumer;
 
public class LineConsumer implements Consumer<String> {
 
	private FileWriter writer;
 
	public LineConsumer(String file) throws IOException {
		writer = new FileWriter(file, true);			
 
	}
 
	@Override
	public void accept(String line) {
		//TODO Ici avoir un try catch me pose problème. Cependant, je ne sais pas comment gérer correctement celle-ci au niveau de la classe test.
		try {
			writer.write(line + "\r\n");
		} catch (IOException e) {
			e.printStackTrace();
		}
 
	}
 
	public void close(){
		try {
			writer.flush();
			writer.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
 
	}
 
}
Citation Envoyé par Exemple de fichier InputFile.txt
Enregistrement technique Blabla
Enregistrement fonctionnelle dudule
Enregistrement technique Titi
une ligne bizarre
Si vous avez une idée sur la façon de procéder qui serai potentiellement plus propre, n'hésitez pas !

Cordialement,
Patrick Kolodziejczyk.