Skip to main content

Java Stream File y manejo de ficheros

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.

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

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
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.
java stream file

Hemos esto dos pasos , el siguiente paso es realizar una reducción y sumar todos los elementos.

java stream file

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.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Catálogo de Cursos