Foro de elhacker.net

Programación => Java => Mensaje iniciado por: rokacasterli en 7 Mayo 2017, 13:53 pm



Título: Fichero De Datos POO.
Publicado por: rokacasterli en 7 Mayo 2017, 13:53 pm
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 :)


Título: Re: Fichero De Datos POO.
Publicado por: Eleкtro en 7 Mayo 2017, 15:23 pm
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!


Título: Re: Fichero De Datos POO.
Publicado por: rokacasterli en 7 Mayo 2017, 16:16 pm
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
  1. public static void main(String[] args) throws IOException {
  2.        Productos producto1;
  3.  
  4.        try{
  5.            BufferedReader entrada=new BufferedReader(new FileReader("datos.txt"));
  6.            String linea;
  7.            entrada.readLine();
  8.            String Denominación="";
  9.            String CódigoÚnico="";
  10.  
  11.            while((linea=entrada.readLine())!=null){
  12.                StringTokenizer str=new StringTokenizer(linea,";");
  13.                Denominación = str.nextToken();
  14.                CódigoÚnico =str.nextToken();}
  15.  
  16.  
  17.  
  18.  
  19.           if(entrada!=null){
  20.               entrada.close();
  21.           }
  22.           producto1=new Productos(Denominación,CódigoÚnico);
  23.  
  24.           System.out.println(producto1);
  25.        }
  26.        catch(FileNotFoundException ex){
  27.          System.out.println("No exite el fichero indicado.");
  28.        }
  29.        catch(IOException ex){
  30.            System.out.println("Error en E/S");
  31.            ex.printStackTrace();
  32.        }
  33.  
  34.    }}

Saludos :)


Título: Re: Fichero De Datos POO.
Publicado por: cunian en 7 Mayo 2017, 19:20 pm
Hola amigo, y si cargas todos los objetos del .txt a un contenedor. un Arraylist o un LinkedList.

Código
  1. public static void main(String[] args) throws IOException {
  2.         //SE CREA ARRAYLIST
  3.        LinkedList<productos> lista_productos = new LinkedList<>();
  4.  
  5.        try {
  6.            BufferedReader entrada = new BufferedReader(new FileReader("datos.txt"));
  7.            String linea;
  8.            entrada.readLine();
  9.            String Denominacion = "";
  10.            String CodigoUnico = "";
  11.  
  12.            while ((linea = entrada.readLine()) != null) {
  13.                StringTokenizer str = new StringTokenizer(linea, ";");
  14.                Denominacion = str.nextToken();
  15.                CodigoUnico = str.nextToken();
  16.               //SE INSERTA UN OBJETO AL CONTENEDOR
  17.                lista_productos.add(new productos(Denominacion, CodigoUnico));
  18.            }
  19.  
  20.            if (entrada != null) {
  21.                entrada.close();
  22.            }
  23.  
  24.  
  25.  
  26.  
  27.  
  28.        } catch (FileNotFoundException ex) {
  29.            System.out.println("No exite el fichero indicado.");
  30.        } catch (IOException ex) {
  31.            System.out.println("Error en E/S");
  32.            ex.printStackTrace();
  33.        }
  34.  
  35.    }


Título: Re: Fichero De Datos POO.
Publicado por: 3n31ch en 7 Mayo 2017, 20:32 pm
Entiendo que quieres algo como esto:

Código
  1. public static void main(String[] args) throws FileNotFoundException, IOException {
  2.        ArrayList<Employee> employees = new ArrayList<>(); // ACA CREO EL ARRAY DE OBJETOS
  3.        // INICIO: LEER FICHERO
  4.        String path = "C:\\Users\\Nacho\\Desktop\\employees.txt";
  5.        FileReader fr = new FileReader(path);
  6.        BufferedReader br = new BufferedReader(fr);
  7.        // FIN: LEER FICHERO
  8.        // INICIO: RECORRER FICHERO
  9.        String line;
  10.        String[] attr; // ACA SE GUARDARA EL ARRAY DE ATRIBUTOS
  11.        while((line = br.readLine()) != null) {
  12.            attr = line.split(";"); // ACA SE GENERA EL ARRAY DE ATRIBUTOS
  13.            employees.add(new Employee(attr[0], attr[1])); // ACA SE CREA EL OBJETO
  14.        }
  15.        br.close();
  16.        // FIN: RECORRER FICHERO
  17.        for(Employee employee : employees) System.out.println(employee); // ACA SE LEE EL ARRAY DE OBJETOS
  18.    }

(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
  1. public static void main(String[] args) throws FileNotFoundException, IOException {
  2.        ArrayList<Employee> employees = new ArrayList<>(); // ACA CREO EL ARRAY DE OBJETOS
  3.        Scanner scanner = new Scanner(new File("C:\\Users\\Nacho\\Desktop\\employees.txt"));// LEO FICHERO
  4.        scanner.useDelimiter("\n"); // SEPARO FICHERO
  5.        String[] attr;
  6.        while(scanner.hasNext()) { // RECORRO FICHERO
  7.            attr = scanner.next().split(";"); // GENERO ARREGLO DE ATRIBUTOS
  8.            employees.add(new Employee(attr[0], attr[1])); // AÑADO OBJETO
  9.        }
  10.        for(Employee employee : employees) System.out.println(employee); // ACA SE LEE EL ARRAY DE OBJETOS
  11.    }


Título: Re: Fichero De Datos POO.
Publicado por: rokacasterli en 9 Mayo 2017, 17:27 pm
Muchas gracias por la ayuda, puedes explicarme qué hace esta sintaxis
Código
  1. for(Productos employee : employees) System.out.println(employee);


Saludos!


Título: Re: Fichero De Datos POO.
Publicado por: 3n31ch en 9 Mayo 2017, 19:04 pm
Muchas gracias por la ayuda, puedes explicarme qué hace esta sintaxis
Código
  1. 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


Título: Re: Fichero De Datos POO.
Publicado por: rokacasterli en 10 Mayo 2017, 23:40 pm
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?


Título: Re: Fichero De Datos POO.
Publicado por: 3n31ch en 11 Mayo 2017, 01:36 am
ponlo como 1 o como 0, si es 0 es false, si es 1 es true.

Luego haces lo siguiente:

Código
  1.       String input = "1";
  2.       boolean bool = input.equals("1");

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