Fichero De Datos POO.

Iniciado por rokacasterli, 7 Mayo 2017, 13:53 PM

0 Miembros y 1 Visitante están viendo este tema.

rokacasterli

Hola, buenas días, necesito saber si alguno de ustedes sabe, o tiene el código o alguna referencia que explique como introducir un los datos de los objetos desde un fichero, en este caso un .txt

Me explico, mi intención es 'crear' dichos objetos a partir de dicho fichero .txt.

En mi .txt tendré los parámetros de mi constructor principal algo como

Pepe Viñuelas Garcia;29;pepe@gmail.com;7788928-X
Pepe2 Viñuelas2 Garcia2;29;pepe2@gmail.com;7788929-X
Pepe3 Viñuelas3 Garcia2;29;pepe3@gmail.com;7788930-X
.
.etc

de forma que en un array de la clase ya definida 'Personas' con tamaño ya establecido, se introduzcan dichos datos.

¿Es posible realizar dicha tarea?

Saludos :)

Eleкtro

#1
Bueno, dudo que alguien te pueda ayudar si no especificas en qué lenguaje de programación estás trabajando.

Si no he entendido mal, tú tienes un archivo delmitado por comas (o CSV) y quieres hallar una forma de poder representar la información de cada linea del archivo mediante objetos.

Bien, una forma rudimentaria de hacerlo sería leer el archivo y partir cada linea individual usando el caracter delimitador, y de este modo obtener un Array con los campos que poder pasarle al constructor de un tipo. Una forma más sofisticada y óptima (según las circunstancias) podría ser mediante la serialización/deserialización de objetos (siempre que el lenguaje que estés utilizando provea esta funcionalidad), de esta forma podrías traducir/convertir el contenido de un archivo, a un tipo específico, y viceversa.

¡Saludos!








rokacasterli

Si, es cierto perdón. Estoy trabajando con Java, JDK 1.7.
''Si no he entendido mal, tú tienes un archivo delmitado por comas (o CSV) y quieres hallar una forma de poder representar la información de cada linea del archivo mediante objetos.'' Así es correcto en concreto un tipo .txt en el de 'algún modo que desconozco', introducir dicho datos pero en un array. Para ser más concreto mi intención es hacer algo así pero con un array de objetos donde en vez de Productos, sean Productos[], pero no sé como hacerlo.

Código (java) [Seleccionar]
public static void main(String[] args) throws IOException {
        Productos producto1;
       
        try{
            BufferedReader entrada=new BufferedReader(new FileReader("datos.txt"));
            String linea;
            entrada.readLine();
            String Denominación="";
            String CódigoÚnico="";
           
            while((linea=entrada.readLine())!=null){
                StringTokenizer str=new StringTokenizer(linea,";");
                Denominación = str.nextToken();
                CódigoÚnico =str.nextToken();}
               
               
               
           
           if(entrada!=null){
               entrada.close();
           }
           producto1=new Productos(Denominación,CódigoÚnico);
           
           System.out.println(producto1);
        }
        catch(FileNotFoundException ex){
          System.out.println("No exite el fichero indicado.");
        }
        catch(IOException ex){
            System.out.println("Error en E/S");
            ex.printStackTrace();
        }
       
    }}


Saludos :)

cunian

#3
Hola amigo, y si cargas todos los objetos del .txt a un contenedor. un Arraylist o un LinkedList.

Código (java) [Seleccionar]
public static void main(String[] args) throws IOException {
         //SE CREA ARRAYLIST
        LinkedList<productos> lista_productos = new LinkedList<>();

        try {
            BufferedReader entrada = new BufferedReader(new FileReader("datos.txt"));
            String linea;
            entrada.readLine();
            String Denominacion = "";
            String CodigoUnico = "";

            while ((linea = entrada.readLine()) != null) {
                StringTokenizer str = new StringTokenizer(linea, ";");
                Denominacion = str.nextToken();
                CodigoUnico = str.nextToken();
               //SE INSERTA UN OBJETO AL CONTENEDOR
                lista_productos.add(new productos(Denominacion, CodigoUnico));
            }

            if (entrada != null) {
                entrada.close();
            }
           
           
           

           
        } catch (FileNotFoundException ex) {
            System.out.println("No exite el fichero indicado.");
        } catch (IOException ex) {
            System.out.println("Error en E/S");
            ex.printStackTrace();
        }

    }

3n31ch

#4
Entiendo que quieres algo como esto:

Código (java) [Seleccionar]
public static void main(String[] args) throws FileNotFoundException, IOException {
       ArrayList<Employee> employees = new ArrayList<>(); // ACA CREO EL ARRAY DE OBJETOS
       // INICIO: LEER FICHERO
       String path = "C:\\Users\\Nacho\\Desktop\\employees.txt";
       FileReader fr = new FileReader(path);
       BufferedReader br = new BufferedReader(fr);
       // FIN: LEER FICHERO
       // INICIO: RECORRER FICHERO
       String line;
       String[] attr; // ACA SE GUARDARA EL ARRAY DE ATRIBUTOS
       while((line = br.readLine()) != null) {
           attr = line.split(";"); // ACA SE GENERA EL ARRAY DE ATRIBUTOS
           employees.add(new Employee(attr[0], attr[1])); // ACA SE CREA EL OBJETO
       }
       br.close();
       // FIN: RECORRER FICHERO
       for(Employee employee : employees) System.out.println(employee); // ACA SE LEE EL ARRAY DE OBJETOS
   }


(Ojo, la ultima linea lee el objeto directamente, para eso hice un override de toString en Employee)


Eso segun yo es la forma mas simple sin tener que acudir a clases poco comunes de java. Si vez lo unico que se usa es ArrayList, FileReader y BufferedReader.

Otra forma seria usar Scanner:
Código (java) [Seleccionar]
public static void main(String[] args) throws FileNotFoundException, IOException {
        ArrayList<Employee> employees = new ArrayList<>(); // ACA CREO EL ARRAY DE OBJETOS
        Scanner scanner = new Scanner(new File("C:\\Users\\Nacho\\Desktop\\employees.txt"));// LEO FICHERO
        scanner.useDelimiter("\n"); // SEPARO FICHERO
        String[] attr;
        while(scanner.hasNext()) { // RECORRO FICHERO
            attr = scanner.next().split(";"); // GENERO ARREGLO DE ATRIBUTOS
            employees.add(new Employee(attr[0], attr[1])); // AÑADO OBJETO
        }
        for(Employee employee : employees) System.out.println(employee); // ACA SE LEE EL ARRAY DE OBJETOS
    }

rokacasterli

Muchas gracias por la ayuda, puedes explicarme qué hace esta sintaxis
Código (java) [Seleccionar]
for(Productos employee : employees) System.out.println(employee);


Saludos!

3n31ch

Cita de: rokacasterli en  9 Mayo 2017, 17:27 PM
Muchas gracias por la ayuda, puedes explicarme qué hace esta sintaxis
Código (java) [Seleccionar]
for(Productos employee : employees) System.out.println(employee);


Saludos!

Eso es un foreach, recorre un arreglo uno por uno:

Si tienes un arrayList de productos llamado: productos y quieres recorrerlo uno por uno haces lo siguiente:

for(Producto producto : productos) {
    System.out.println(producto.getNombre());
}

El azul seria el Tipo de ArrayList o mas bien la Clase de los objetos que contiene.
El verde seria la variable temporal que tendra cada producto cuando se itere sobre el
El rojo es la lista de productos sobre la cual iteras

rokacasterli

Vale, muchas gracias.

Otra duda, para convertir un booleano a String, de manera que desde un archivo pueda leer dicho atributo boolean, ¿cómo es la mejor manera de recoger dicha información?

3n31ch

ponlo como 1 o como 0, si es 0 es false, si es 1 es true.

Luego haces lo siguiente:

Código (java) [Seleccionar]

       String input = "1";
       boolean bool = input.equals("1");


Seguramente existen mas formas, pero esa se me ocurre por le momento.