El concepto de Java Stream file , cada día se usa más ya que Java 8 nos permite simplificar sobremanera la lectura de ficheros. Algo que en Java clásico siempre ha sido bastante complejo . Vamos a ver un ejemplo sencillo de como leer un fichero linea a linea. Para ello partiremos del siguiente fichero.
1,pc,1000
2,mac,2000
3,android,300
4,ios,900
Vamos a construir una clase Java que se denomine Ordenador y almacene los datos que se encuentran en el fichero.
package com.arquitecturajava;
public class Ordenador {
private int numero;
private String sistema;
private double precio;
public int getNumero() {
return numero;
}
public void setNumero(int numero) {
this.numero = numero;
}
public String getSistema() {
return sistema;
}
public void setSistema(String sistema) {
this.sistema = sistema;
}
public double getPrecio() {
return precio;
}
public void setPrecio(double precio) {
this.precio = precio;
}
public Ordenador(int numero, String sistema, double precio) {
super();
this.numero = numero;
this.sistema = sistema;
this.precio = precio;
}
public static Ordenador buildFromArray(String[] elementos) {
return new Ordenador (Integer.parseInt(elementos[0]),elementos[1],Double.parseDouble(elementos[2]));
}
}
Veamos el programa principal:
package com.arquitecturajava;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Stream;
public class Principal {
public static void main(String[] args) {
String ficheros = "datos.txt";
try (Stream<String> stream = Files.lines(Paths.get(ficheros))) {
stream.map(linea -> linea.split(","))
.map(Ordenador::buildFromArray)
.mapToDouble(o -> o.getPrecio())
.onClose(() -> System.out.println("termino"))
.reduce(Double::sum)
.ifPresent(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Acabamos de usar el método lines de la clase Files para construir un Stream. Este Stream nos permite leer linea a linea el fichero de texto. Una vez accedemos a cada linea realizamos dos operaciones de mapeo y convertimos cada linea en un objeto y luego en un número.
Hemos esto dos pasos , el siguiente paso es realizar una reducción y sumar todos los elementos.
Al ejecutar el Stream sobre un bloque de try with resources el Stream cerrará los recursos asociados a ficheros invocando al método close. Cuando el método close se invoque asociamos una expresión lambda al momento de su ejecución.
El resultado nos muestra la suma y el mensaje de “terminó”. Acabamos de construir un ejemplo de Java Stream File.
Otros artículos relacionados