Java 8, lectura de archivos y expresiones Lambda

Java 8 tiene unas cuantas mejoras para lectura y procesado de archivos, veamos algunas de ellas....
En este caso utilizaremos únicamente librerias de la JVM 1.8. para crear un archivo, leerlo y realizar algo de procesado con él.

Veamos el ejemplo:

La primera parte del código es trivial, utilizar un FileWriter  para escribir un archivo.
(Este código es valido para versiones anteriores de la máquina virtual de java.)

Leer el archivo y volcar todos el contenido en consola:
Stream<String> multilineas = Files.lines(filetext.toPath());
for (Iterator<String> iterator = multilineas.iterator(); iterator.hasNext();) {
System.out.println(iterator.next());
}

Otra forma de volcar el contenido con una expresión lambda:
Stream<String> lambdaStream = Files.lines(filetext.toPath());
lambdaStream.forEach(s -> System.out.println(s));

Y por último filtrando las lineas que contienen "om" con una expresión lambda:
Stream<String> lambdaFilter = Files.lines(filetext.toPath());
Optional<String> tengoCome = lambdaFilter.filter(s -> s.contains("om")).findAny();
if (tengoCome.isPresent()) {
System.out.println(tengoCome.get());
}

Creo que con tres ejemplos muy básicos de por dónde apuntan las expresiones lambda se tiene un punto para empezar a jugar con java8 y sus novedades.

Si el lector tiene algo de experiencia con groovy no tendrá muchos problemas en "hacerse" con este tipo de código.

Si en el proceso de lectura obtenemos una traza de excepción "java.io.UncheckedIOException: java.nio.charset.MalformedInputException: Input length = 1"  Significa que está intentando recuperar con el encoding por defecto: "UTF-8".
Por ejemplo si el archivo de origen esta como ISO-8859-1 deberemos explicitarlo con:
Stream<String> multilineas = Files.lines(fileProperties.toPath(),Charset.forName("ISO-8859-1"));
para que la lectura sea correcta.


Comentarios