elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Leer datos de un fichero y crear una lista con ellos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Leer datos de un fichero y crear una lista con ellos  (Leído 2,144 veces)
LuisCardenas123

Desconectado Desconectado

Mensajes: 30


Ver Perfil
Leer datos de un fichero y crear una lista con ellos
« en: 30 Abril 2019, 16:32 pm »

Buenas, estoy intentando realizar un ejercicio pero no logro sacarlo, la idea es leer los datos de un fichero en java y luego almacenarlo en una lista de objetos. El enunciado del ejercicio es el siguiente y el código que tengo yo hecho es el siguiente:

Realiza un programa que lea los datos del ejercicio 4. Para ello creará una lista de objetos de tipo Vehiculo. El programa irá almacenando en la lista los objetos leídos desde el archivo de texto “vehículos.txt”. Una vez cargados todos los datos en la lista, ordena los vehículos por Marca y muestra el resultado por consola.

public class Ejercicio7 {

    public static void main(String[] args) {
        String idFichero = "vehiculos.txt";

        String linea;
        ArrayList<Vehiculo>lista=new ArrayList<>();

        System.out.println("Leyendo el fichero: " + idFichero);

        try (Scanner datosFichero = new Scanner(new File(idFichero))) {

            while (datosFichero.hasNextLine()) {
               
                linea = datosFichero.nextLine();
                lista.add(linea);
                for (int i = 0; i < lista.size(); i++) {
                    System.out.println(lista.get(i));
                }

            }

        } catch (FileNotFoundException e) {
            System.out.println(e.getMessage());
        }
    }
}

Gracias de antemano


En línea

ThunderCls


Desconectado Desconectado

Mensajes: 455


Coder | Reverser | Gamer


Ver Perfil WWW
Re: Leer datos de un fichero y crear una lista con ellos
« Respuesta #1 en: 30 Abril 2019, 21:43 pm »

No pones demasiada informacion y se hace mas dificil poder guiarte, pero suponiendo que tienes ya una clase "Vehiculo" serializable con sus atributos incluidos, solo tendrias que leer el objeto serializado usando un ObjectInputStream

Código
  1.    public Object ReadObjectFromFile(String filepath)
  2.    {
  3.        try
  4.        {
  5.            FileInputStream fileIn = new FileInputStream(filepath);
  6.            ObjectInputStream objectIn = new ObjectInputStream(fileIn);
  7.  
  8.            Object obj = objectIn.readObject();
  9.  
  10.            System.out.println("The Object has been read from the file");
  11.            objectIn.close();
  12.            return obj;
  13.        } catch (Exception ex) {
  14.            ex.printStackTrace();
  15.            return null;
  16.        }
  17.    }

Fuentes:
https://examples.javacodegeeks.com/core-java/io/file/how-to-read-an-object-from-file-in-java/
http://www.javapractices.com/topic/TopicAction.do?Id=57
https://stackoverflow.com/questions/30413227/how-to-read-and-write-an-object-to-a-text-file-in-java

Saludos


En línea

-[ "…I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/
rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Leer datos de un fichero y crear una lista con ellos
« Respuesta #2 en: 1 Mayo 2019, 01:40 am »

Buenas, estoy intentando realizar un ejercicio pero no logro sacarlo, la idea es leer los datos de un fichero en java y luego almacenarlo en una lista de objetos. El enunciado del ejercicio es el siguiente y el código que tengo yo hecho es el siguiente:

Realiza un programa que lea los datos del ejercicio 4. Para ello creará una lista de objetos de tipo Vehiculo. El programa irá almacenando en la lista los objetos leídos desde el archivo de texto “vehículos.txt”. Una vez cargados todos los datos en la lista, ordena los vehículos por Marca y muestra el resultado por consola.

public class Ejercicio7 {

    public static void main(String[] args) {
        String idFichero = "vehiculos.txt";

        String linea;
        ArrayList<Vehiculo>lista=new ArrayList<>();

        System.out.println("Leyendo el fichero: " + idFichero);

        try (Scanner datosFichero = new Scanner(new File(idFichero))) {

            while (datosFichero.hasNextLine()) {
              
                linea = datosFichero.nextLine();
                lista.add(linea);
                for (int i = 0; i < lista.size(); i++) {
                    System.out.println(lista.get(i));
                }

            }

        } catch (FileNotFoundException e) {
            System.out.println(e.getMessage());
        }
    }
}

Gracias de antemano

Que tal, como esta diseñado el fichero ?

 * Use aqui fluent api
 * Tiene JFileChooser, al ejecutar lo usas para importar el .txt
 


Uso
Código
  1. new ILeerVehiculos.LeerVehiculoImpl<>()
  2.       .buscarFichero()
  3.       .procesarFichero()
  4.       .ordenarPorMarca()
  5.       .make();


Código
  1. /**
  2.  *
  3.  * @param <T>
  4.  */
  5. @FunctionalInterface
  6. public interface IBuilder<T> extends ShowData  {
  7.    T make();
  8. }

Bean Vehiculo

Código
  1. package com.foro.leerfichero;
  2. import java.util.Objects;
  3. import java.util.function.Consumer;
  4. /**
  5.  * @implSpec THREAD-SAFE
  6.  * Bean Vehiculo
  7.  */
  8. public final class Vehiculo {
  9.  
  10.  
  11.    private final String marca;
  12.    private final String modelo;
  13.  
  14.    public Vehiculo(final Vehiculo.Builder vb) {
  15.        this.marca = vb.marca;
  16.        this.modelo = vb.modelo;
  17.    }
  18.  
  19.    public String getMarca() {
  20.        return marca;
  21.    }
  22.  
  23.    public String getModelo() {
  24.        return modelo;
  25.    }
  26.  
  27.    @Override
  28.    public boolean equals(Object o) {
  29.        if (this == o) return true;
  30.        if (!(o instanceof Vehiculo)) return false;
  31.        Vehiculo vehiculo = (Vehiculo) o;
  32.        return Objects.equals(marca, vehiculo.marca) &&
  33.                Objects.equals(modelo, vehiculo.modelo);
  34.    }
  35.  
  36.    @Override
  37.    public int hashCode() {
  38.        return Objects.hash(marca, modelo);
  39.    }
  40.  
  41.    @Override
  42.    public String toString() {
  43.        final StringBuilder sb = new StringBuilder();
  44.        sb.append("Marca: ").append(marca);
  45.        sb.append(" Modelo: ").append(modelo).append("\n");
  46.        return sb.toString();
  47.    }
  48.  
  49.  
  50.    /**
  51.      * Builder
  52.      */
  53.    public static class Builder implements IBuilder<Vehiculo> {
  54.  
  55.        private String marca;
  56.        private String modelo;
  57.  
  58.        public Builder con(final Consumer<Builder> consumer) {
  59.            consumer.accept(this);
  60.            return this;
  61.        }
  62.  
  63.        @Override
  64.        public Vehiculo make() {
  65.            return new Vehiculo(this);
  66.        }
  67.    }
  68. }
  69.  
  70.  

Código
  1. package com.foro.leerfichero;
  2.  
  3. import javax.swing.*;
  4. import javax.swing.filechooser.FileNameExtensionFilter;
  5. import java.io.BufferedReader;
  6. import java.io.IOException;
  7. import java.nio.charset.Charset;
  8. import java.nio.file.Paths;
  9. import java.util.*;
  10. import java.nio.file.Files;
  11. import java.nio.file.Path;
  12. import java.util.stream.Collectors;
  13.  
  14. /**
  15.  * @autor rub'n
  16.  */
  17. public interface ILeerVehiculos {
  18.  
  19.   interface Builder<T> {
  20.  
  21.        /**
  22.          * Busca el fichero por medio del JFileChooser
  23.          * @return
  24.          */
  25.        Builder<T> buscarFichero();
  26.  
  27.        /**
  28.          *
  29.          * @return leer el fichero
  30.          */
  31.        Builder<T> procesarFichero();
  32.  
  33.        /**
  34.          *
  35.          * @return ordenar por la marca
  36.          */
  37.        Builder<T> ordenarPorMarca();
  38.  
  39.        /**
  40.          *  Mutador
  41.          * @return
  42.          */
  43.        T make();
  44.  
  45.    }
  46.  
  47.    @SuppressWarnings("unchecked")
  48.    public abstract class AbtractBaseClass<T> implements Builder<T> {
  49.  
  50.        private final List<Vehiculo> vehiculoList = new ArrayList<>();
  51.        private List<String> datosLeidos = new ArrayList<>();
  52.        private Path pathFichero;
  53.  
  54.        public AbtractBaseClass() {
  55.  
  56.        }
  57.  
  58.        @Override
  59.        public Builder<T> buscarFichero() {
  60.            final JFileChooser fileChooser = new JFileChooser();
  61.            fileChooser.setFileFilter(new FileNameExtensionFilter("archivo .txt","txt"));
  62.            fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
  63.            final int opc = fileChooser.showOpenDialog(null);
  64.            if(opc == JFileChooser.CANCEL_OPTION) {
  65.                JOptionPane.showMessageDialog(null,"No ha seleccionado fichero");
  66.                System.exit(0);
  67.            }
  68.            this.pathFichero =fileChooser.getSelectedFile().toPath().toAbsolutePath();
  69.            return this;
  70.        }
  71.  
  72.        @Override
  73.        public Builder<T> procesarFichero() {
  74.            if(Objects.nonNull(pathFichero)) {
  75.                try (final BufferedReader br = Files.newBufferedReader(pathFichero, Charset.defaultCharset())) {
  76.                    datosLeidos = br.lines()
  77.                            .map(e -> e.replaceAll("\\s+", "-")) //flag
  78.                            .filter(e -> !e.startsWith("Marca") && !e.isEmpty()) // ignorar la primera linea
  79.                            .collect(Collectors.toList()); // convertimos en lista de Strings
  80.  
  81.                    datosLeidos
  82.                            .forEach(e -> {
  83.                                String marca = e.split("-")[0];
  84.                                String modelo = e.split("-")[1];
  85.                                final Vehiculo vehiculo = new Vehiculo.Builder()
  86.                                        .con(param -> {
  87.                                            param.marca = marca;
  88.                                            param.modelo = modelo;
  89.                                        })
  90.                                        .make();
  91.                                vehiculoList.add(vehiculo);
  92.                            });
  93.  
  94.                } catch (IOException ex) {
  95.                    ex.printStackTrace();
  96.                }
  97.            } else {
  98.                   JOptionPane.showMessageDialog(null,"Path nullo");
  99.            }
  100.            return this;
  101.        }
  102.  
  103.        @Override
  104.        public Builder<T> ordenarPorMarca() {
  105.            vehiculoList
  106.                    .stream()
  107.                    .sorted(Comparator.comparing(Vehiculo::getMarca)) // ordenamos en base a la marca
  108.                    .forEach(System.out::println); //salida
  109.  
  110.            return this;
  111.        }
  112.  
  113.    }
  114.  
  115.    /**
  116.      *
  117.      * @param <T>
  118.      */
  119.    public class LeerVehiculoImpl<T> extends AbtractBaseClass<LeerVehiculoImpl> {
  120.  
  121.        @Override
  122.        public LeerVehiculoImpl make() {
  123.            return new LeerVehiculoImpl();
  124.        }
  125.    }
  126.  
  127.    public static void main(String ...blablabla) {
  128.  
  129.        new ILeerVehiculos.LeerVehiculoImpl<>()
  130.                .buscarFichero()
  131.                .procesarFichero()
  132.                .ordenarPorMarca()
  133.                .make();
  134.    }
  135. }
  136.  

Posible fichero Vehiculos.txt

Código
  1. Marca         Modelo
  2.  
  3. Bugati        Chiron
  4. Maserati      Quattroporte
  5. Suzuki        Baleno
  6. Lamborghini   Huracan
  7.  
  8.  

OutPut por consola

Código
  1. Marca: Bugati Modelo: Chiron
  2.  
  3. Marca: Lamborghini Modelo: Huracan
  4.  
  5. Marca: Maserati Modelo: Quattroporte
  6.  
  7. Marca: Suzuki Modelo: Baleno
  8.  
  9.  
  10. Process finished with exit code 0



Versión con ObjectInputStream y ObjectOuputStream, aquí los Bean a escribir deben implementar a Serializable

Código
  1. package archivos;
  2.  
  3. import java.io.BufferedInputStream;
  4. import java.io.BufferedOutputStream;
  5. import java.io.IOException;
  6. import java.io.ObjectInputStream;
  7. import java.io.ObjectOutputStream;
  8. import java.io.Serializable;
  9. import java.nio.file.Files;
  10. import java.nio.file.Path;
  11. import java.nio.file.Paths;
  12. import java.nio.file.StandardOpenOption;
  13. import java.util.Collections;
  14. import java.util.Comparator;
  15. import java.util.List;
  16. import java.util.concurrent.CopyOnWriteArrayList;
  17.  
  18. import beans.Persona;
  19.  
  20. /**
  21.  *
  22.  *
  23.  */
  24. public class ConObjectIOStream implements Serializable {
  25.  
  26.        /**
  27.          *
  28.          */
  29.        private static final long serialVersionUID = 1513236979625800662L;
  30.  
  31.  
  32.        /**
  33.          *
  34.          */
  35.        public ConObjectIOStream() {
  36.  
  37.                //writeToFile();
  38.                writePersonToTempFile();
  39.                final List<Persona> listaPersona = readFromFile();
  40.                /**
  41.                  * Ordenar por nombres alfabeticamente
  42.                  */
  43.                listaPersona
  44.                        .stream()
  45.                        .sorted(Comparator.comparing(Persona::getNombre))
  46.                        .forEach(System.out::println);
  47.        }
  48.  
  49.        private List<Persona> readFromFile() {
  50.                final List<Persona> listaPersona = new CopyOnWriteArrayList<>();
  51.                final Path pathAlimento = Paths.get("resources/temporal.tmp");
  52.                try(final BufferedInputStream bin = new BufferedInputStream(Files.newInputStream(pathAlimento));
  53.                        final ObjectInputStream ob = new ObjectInputStream(bin)) {
  54.  
  55.                        while(Boolean.TRUE) {
  56.                                synchronized (this) { //en caso de que readFrom se invoque desde un Thread()
  57.                                        final Object object = ob.readObject();
  58.                                        if(object instanceof Persona) {
  59.                                                listaPersona.add((Persona)object);
  60.                                        }
  61.                                }
  62.                        }
  63.  
  64.                } catch (IOException | ClassNotFoundException e) {
  65.                        //no hacer nada EOFException
  66.                }
  67.                return Collections.unmodifiableList(listaPersona);
  68.        }
  69.  
  70.        private void writePersonToTempFile() {
  71.  
  72.                final Persona persona1 = new Persona();
  73.                persona1.setNombre("Rubn");
  74.                persona1.setApellido("la muerte");
  75.                persona1.setCorreo("rdjfjfjjf@gmail.com");
  76.                persona1.setEdad(30);
  77.  
  78.                final Persona persona2 = new Persona();
  79.                persona2.setNombre("Aaaaa");
  80.                persona2.setApellido("Espia");
  81.                persona2.setCorreo("fffffffp@gmail.com");
  82.                persona2.setEdad(27);
  83.  
  84.                final Persona persona3 = new Persona();
  85.                persona3.setNombre("malware");
  86.                persona3.setApellido("wannacry");
  87.                persona3.setCorreo("testbma a@gmail.com");
  88.                persona3.setEdad(27);
  89.  
  90.  
  91.                final Path pathTem = Paths.get("resources/temporal.tmp");
  92.  
  93.                try( final BufferedOutputStream bos = new BufferedOutputStream(Files.newOutputStream(pathTem, StandardOpenOption.CREATE));
  94.                         final ObjectOutputStream ob = new ObjectOutputStream(bos)) {
  95.  
  96.                        synchronized (this) {
  97.                                ob.writeObject(persona1);
  98.                                ob.writeObject(persona2);
  99.                                ob.writeObject(persona3);
  100.                        }
  101.  
  102.                }catch (IOException e) {
  103.                        e.printStackTrace();
  104.                }
  105.  
  106.        }
  107.  
  108.        public static void main(String[] args) {
  109.                new ConObjectIOStream();
  110.        }
« Última modificación: 28 Mayo 2019, 17:59 pm por rub'n » En línea



rubn0x52.com KNOWLEDGE  SHOULD BE FREE.
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen ki
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines