Java - AyudaArchivosJava

 
Vista:
sin imagen de perfil
Val: 14
Ha aumentado su posición en 8 puestos en Java (en relación al último mes)
Gráfica de Java

AyudaArchivosJava

Publicado por HECTOR ENRIQUE (3 intervenciones) el 06/12/2018 04:13:59
1
necesito su ayuda porfa gracias a todo el que pueda ayudar
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
-2
Responder
sin imagen de perfil
Val: 358
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

AyudaArchivosJava

Publicado por Nicolas (137 intervenciones) el 06/12/2018 12:40:25
Hola Hector.
Cuál es tu problema?? En dónde precisas ayuda??
Tienes que ser un poco más concreto en tu problema para que podas darte una mano. Postea un fragmento del código dónde tienes el error por ej.
Abrazo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 14
Ha aumentado su posición en 8 puestos en Java (en relación al último mes)
Gráfica de Java

AyudaArchivosJava

Publicado por Héctor (3 intervenciones) el 06/12/2018 19:17:27
Me gustaría si podrían ayudarme a resolverlo
Todavía no entiendo muy bien archivos y es el proyecto que dejó el maestro
Gracias por tu respuesta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

AyudaArchivosJava

Publicado por Billy Joel (875 intervenciones) el 06/12/2018 21:35:11
Si necesitas leer un archivo acá te dejo un ejemplo:
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
import java.io.*;
 
class LeeFichero {
   public static void main(String [] arg) {
      File archivo = null;
      FileReader fr = null;
      BufferedReader br = null;
 
      try {
         // Apertura del fichero y creacion de BufferedReader para poder
         // hacer una lectura comoda (disponer del metodo readLine()).
         archivo = new File ("C:\\archivo.txt");
         fr = new FileReader (archivo);
         br = new BufferedReader(fr);
 
         // Lectura del fichero
         String linea;
         while((linea=br.readLine())!=null)
            System.out.println(linea);
      }
      catch(Exception e){
         e.printStackTrace();
      }finally{
         // En el finally cerramos el fichero, para asegurarnos
         // que se cierra tanto si todo va bien como si salta 
         // una excepcion.
         try{
            if( null != fr ){
               fr.close();
            }
         }catch (Exception e2){
            e2.printStackTrace();
         }
      }
   }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

AyudaArchivosJava

Publicado por Billy Joel (875 intervenciones) el 07/12/2018 17:26:11
Después de leerlo y leerlo le di vueltas al asunto y bueno así lo estructuro:
• Se necesitan crear 2 Java Beans
o Rancho:
 nombre
 total vacas
 total toros
 apPrimerAnimal (No sé para qué sirve esto pero es lo que piden y lo vamos a poner)
o Animal:
 Id rancho
 Tipo
 Siguiente
• Se necesitan crear 3 clases:
o GenerarRancho
 Esta clase tiene la funcionalidad de leer un archivo llamado RANCHOS.DAT.
 Esta clase solo sirve para leer el archivo y ya. Yo le he sobre escrito el método toString para que muestre el contenido del archivo.
o GenerarGanado
 Esta clase tiene por funcionalidad leer el archivo ANIMALES.DAT y hacer cálculos en base a la cantidad de vacas y toros por rancho.
 Le he sobre escrito el método toString para que muestre el resultado del cálculo de vacas y toros por rancho, además del contenido del archivo ANIMALES.DAT.
o ActualizarRanchos
 La función principal de esta clase es generar un archivo CUENTAS.DAT con un formato similar al que tiene RANCHOS.DAT.

Los archivos contienen por cada línea un registro. En el caso de RANCHOS.DAT sería:
• Id del rancho
• Cantidad de vacas
• Cantidad de toros
• apPrimerAnimal
Vamos que por cada línea de este archivo se genera un objeto de la clase Rancho.

El contenido del archivo ANIMALES.DAT contendría lo siguiente:
• id del rancho
• tipo (1 si es vaca. 2 si es toro, 3 si es un Dragonite)
• siguiente (tampoco se para que sirve esto pero vamos a dejarlo porque lo piden)

Cada línea de este archivo genera un objeto Animal que luego es utilizado para hacer los cálculos y eventualmente actualizar los datos de los ranchos.

Para ver el resultado de todo esto andando necesitamos de un método main o una clase principal que se encargue de la ejecución del programa.

A continuación el contenido del archivo RANCHOS.DAT
1
2
3
4
5
6
RANCHO001	10	2	1
RANCHO002	25	5	1
RANCHO003	25	6	1
RANCHO004	27	4	1
RANCHO005	26	3	1
RANCHO006	24	2	1

El contenido del archivo ANIMALES.DAT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1	1	0
1	1	0
1	1	0
1	1	0
2	2	0
2	1	0
2	1	0
2	1	0
2	1	0
3	1	0
3	1	0
3	1	0
3	2	0
3	1	0
3	1	0
3	1	0

Si te has percatado cada línea es separada por tabulaciones, entonces para obtener el valor de cada campo lo que toca es hacer:
1
linea.split("\t");
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

AyudaArchivosJava

Publicado por Billy Joel (875 intervenciones) el 07/12/2018 17:31:09
Entonces vamos con las clases. A continuación la clase GenerarRancho
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
 
public class GenerarRancho {
 
    private static GenerarRancho generarRancho;
    public static final String PATH_RANCHOS_DAT = "D:\\descargas\\RANCHOS.txt";
    private Map<String, Rancho> ranchos = new HashMap();
 
    private GenerarRancho() {
        File archivo;
        FileReader fr = null;
        BufferedReader br;
 
        try {
            archivo = new File(PATH_RANCHOS_DAT);
            fr = new FileReader(archivo);
            br = new BufferedReader(fr);
 
            // Lectura del fichero
            String linea;
            while ((linea = br.readLine()) != null) {
                Rancho r = loadRancho(linea);
                ranchos.put(r.getNombre(), r);
            }
        } catch (IOException e) {
            e.printStackTrace(System.out);
        } finally {
            try {
                if (fr != null) {
                    fr.close();
                }
            } catch (IOException e2) {
                e2.printStackTrace(System.out);
            }
        }
    }
 
    public static GenerarRancho getInstance() {
        if (generarRancho == null) {
            generarRancho = new GenerarRancho();
        }
        return generarRancho;
    }
 
    private Rancho loadRancho(String linea) {
        Rancho r = new Rancho();
        String[] f = linea.split("\t");
        r.setNombre(f[0]);
        r.setTotalVacas(Integer.parseInt(f[1]));
        r.setTotalToros(Integer.parseInt(f[2]));
        r.setApPrimerAnimal(Integer.parseInt(f[3]));
        return r;
    }
 
    @Override
    public String toString() {
        String s = "";
        for (String k : ranchos.keySet()) {
            Rancho v = ranchos.get(k);
            s += k + "\t" + v.getTotalVacas() + "\t" + v.getTotalToros() + "\t" + v.getApPrimerAnimal() + "\n";
        }
        return s;
    }
 
    public static void main(String[] args) {
        System.out.println(GenerarRancho.getInstance().toString());
    }
}

La clase GenerarGanado
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
public class GenerarGanado {
 
    private static GenerarGanado generarGanado;
    public static final String PATH_ANIMALES_DAT = "D:\\descargas\\ANIMALES.txt";
    private Map<String, Rancho> ranchos = new HashMap();
    private List<String> registros;
 
    /**
     * Constructor de la clase
     */
    private GenerarGanado() {
        File archivo;
        FileReader fr = null;
        BufferedReader br;
 
        try {
            archivo = new File(PATH_ANIMALES_DAT);
            fr = new FileReader(archivo);
            br = new BufferedReader(fr);
 
            // Lectura del fichero
            String linea;
            registros = new ArrayList();
            while ((linea = br.readLine()) != null) {
                registros.add(linea);
                Animal a = loadAnimal(linea);
                String idRancho = getRanchoNameFromId(a.getIdRancho());
                if (ranchos.containsKey(idRancho)) {
                    ranchos.get(idRancho).setTotalToros(ranchos.get(idRancho).getTotalToros() + (a.getTipo() == 2 ? 1 : 0));
                    ranchos.get(idRancho).setTotalVacas(ranchos.get(idRancho).getTotalVacas() + (a.getTipo() == 1 ? 1 : 0));
                } else {
                    Rancho rancho = new Rancho();
                    rancho.setNombre(getRanchoNameFromId(a.getIdRancho()));
                    rancho.setTotalToros(a.getTipo() == 2 ? 1 : 0);
                    rancho.setTotalVacas(a.getTipo() == 1 ? 1 : 0);
                    rancho.setApPrimerAnimal(a.getSiguiente());
                    ranchos.put(rancho.getNombre(), rancho);
                }
            }
        } catch (IOException e) {
            e.printStackTrace(System.out);
        } finally {
            try {
                if (fr != null) {
                    fr.close();
                }
            } catch (IOException e2) {
                e2.printStackTrace(System.out);
            }
        }
    }
 
    /**
     * Devuelve una instancia de la clase GenerarGanado
     *
     * @return
     */
    public static GenerarGanado getInstance() {
        if (generarGanado == null) {
            generarGanado = new GenerarGanado();
        }
        return generarGanado;
    }
 
    /**
     * Genera un objeto Animal en base a la línea que representa un registro del
     * archivo ANIMALES.DAT
     *
     * @param linea
     * @return
     */
    private Animal loadAnimal(String linea) {
        Animal a = new Animal();
        String[] f = linea.split("\t");
        a.setIdRancho(Integer.parseInt(f[0]));
        a.setTipo(Integer.parseInt(f[1]));
        a.setSiguiente(Integer.parseInt(f[2]));
        return a;
    }
 
    private String getRanchoNameFromId(Integer id) {
        String name = "RANCHO";
        if (id.toString().length() < 3) {
            for (int i = 0; i < 3 - id.toString().length(); i++) {
                name += "0";
            }
        }
        return name + id;
    }
 
    /**
     * Devuelve un mapa con los ranchos calculados, producto de la lectura del
     * archivo de ANIMALES
     *
     * @return
     */
    public Map<String, Rancho> getRanchosCalculados() {
        return ranchos;
    }
 
    @Override
    public String toString() {
        String s = "Ranchos:\n";
        for (String k : ranchos.keySet()) {
            Rancho v = ranchos.get(k);
            s += k + "\t" + v.getTotalVacas() + "\t" + v.getTotalToros() + "\t" + v.getApPrimerAnimal() + "\n";
        }
        s += "\n\nAnimales:\n";
        for (String l : registros) {
            s += l + "\n";
        }
        return s;
    }
 
    public static void main(String[] ags) {
        System.out.println(GenerarGanado.getInstance().toString());
    }
}

A conctinuación la clase ActualizarRanchos
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
 
public class ActualizarRanchos {
 
    public static ActualizarRanchos actualizarRanchos;
    private final Map<String, Rancho> ranchos;
    public static final String PATH_CUENTAS_DAT = "D:\\descargas\\CUENTAS.txt";
 
    private ActualizarRanchos() {
        ranchos = GenerarGanado.getInstance().getRanchosCalculados();
 
    }
 
    public static ActualizarRanchos getInstance() {
        if (actualizarRanchos == null) {
            actualizarRanchos = new ActualizarRanchos();
        }
        return actualizarRanchos;
    }
 
    public File getCuentas() {
        FileWriter fichero = null;
        PrintWriter pw;
        try {
            fichero = new FileWriter(PATH_CUENTAS_DAT);
            pw = new PrintWriter(fichero);
            ranchos.forEach((k, v) -> {
                pw.println(k + "\t" + v.getTotalVacas() + "\t" + v.getTotalToros() + "\t" + v.getApPrimerAnimal());
            });
 
        } catch (IOException e) {
            e.printStackTrace(System.out);
        } finally {
            try {
                if (fichero != null) {
                    fichero.close();
                }
            } catch (IOException e2) {
                e2.printStackTrace(System.out);
            }
        }
        return new File(PATH_CUENTAS_DAT);
    }
 
    public static void main(String[] args) {
        ActualizarRanchos.getInstance().getCuentas();
    }
}

Y por últomo la clase Principal que se encargaría de ejecutar todo con cierto sentido lógico ya que esto no lo piden en el enunciado:
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
38
39
40
41
42
43
44
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
 
public class Principal {
 
    public static void main(String[] args) {
        System.out.println("Primero vemamos el contenido deL archivo RANCHOS.DAT");
        System.out.println(GenerarRancho.getInstance().toString());
        System.out.println("-----------------------------------------------------");
 
        System.out.println("Ahora veamos la información que nos genera la clase GenerarAnimales");
        System.out.println(GenerarGanado.getInstance().toString());
        System.out.println("-----------------------------------------------------");
 
        System.out.println("Ahora generemos el archivo CUENTAS.DAT y veamos su contenido:");
        File archivo;
        FileReader fr = null;
        BufferedReader br;
 
        try {
            archivo = ActualizarRanchos.getInstance().getCuentas();
            fr = new FileReader(archivo);
            br = new BufferedReader(fr);
 
            // Lectura del fichero
            String linea;
            while ((linea = br.readLine()) != null) {
                System.out.println(linea);
            }
        } catch (IOException e) {
            e.printStackTrace(System.out);
        } finally {
            try {
                if (fr != null) {
                    fr.close();
                }
            } catch (IOException e2) {
                e2.printStackTrace(System.out);
            }
        }
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

AyudaArchivosJava

Publicado por Billy Joel (875 intervenciones) el 07/12/2018 17:40:51
Si bien a los archivos no le puse la extención .DAT y los dejé con .txt es porque me dio la gana ;.p
Se tu le puedes cambiar la extención si quieres...

Al final el contenido del archivo CUENTAS es:
1
2
3
RANCHO003	6	1	0
RANCHO002	4	1	0
RANCHO001	4	0	0

Basicamente es contenido de CUENTAS es el resultado de los calculos que se hacen en la clase GenerarGanado. La clase ActualizarRanchos solo se encarga de generar el archvo.

PD: He publicado 3 post porque el foro me dejaba poner una respuesta tan larga.

Espero que te sirva, mira los códigos. Hago uso de Colecciones Maps que tal ves sean un poquito avanzado pero creeme que no es para nada complicado.
Si quieres ver mas ejemplos de los Maps mira este link: https://examples.javacodegeeks.com/java-basics/java-map-example/

Cualquier duda escribe....
Saludos!!
;-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 14
Ha aumentado su posición en 8 puestos en Java (en relación al último mes)
Gráfica de Java

AyudaArchivosJava

Publicado por HECTOR ENRIQUE (3 intervenciones) el 09/12/2018 00:33:57
Gracias por la respuesta
podrías poner los Archivos Rancho.dat y Animales.dat
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

AyudaArchivosJava

Publicado por Billy Joel (875 intervenciones) el 09/12/2018 13:39:46
El contenido del archivo Rancho.dat sería así:
1
2
3
4
5
6
RANCHO001	10	2	1
RANCHO002	25	5	1
RANCHO003	25	6	1
RANCHO004	27	4	1
RANCHO005	26	3	1
RANCHO006	24	2	1

El contenido del archivo Animales.dat sería así
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1	1	0
1	1	0
1	1	0
1	1	0
2	2	0
2	1	0
2	1	0
2	1	0
2	1	0
3	1	0
3	1	0
3	1	0
3	2	0
3	1	0
3	1	0
3	1	0

Lo que debes hacer es abrir dos blocs de notas y poner el contenido de cada uno de los archivos dentro y los guardas con la extensión .dat

En la clase GenerarRancho está la variable constante PATH_RANCHOS_DAT
1
public static final String PATH_RANCHOS_DAT = "D:\\descargas\\RANCHOS.txt";

En la clase GenerarGanado está la variable constante PATH_ANIMALES_DAT
1
public static final String PATH_ANIMALES_DAT = "D:\\descargas\\ANIMALES.txt";

En la clase ActualizarRancho está la variable constante PATH_CUENTAS_DAT
1
public static final String PATH_CUENTAS_DAT = "D:\\descargas\\CUENTAS.txt";

Si quieres trabajarlo con la extensión .dat solo cambiale la extensión, a nivel de Java eso no afecta.

Espero haberte ayudado!!
Saludos!
;-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar