es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo obtener un valor específico de un archivo txt en Java?

Tengo dos archivos .txt:
1. mothers.txt (IdNum, nombre, edad) por ejemplo: 6, Emily, 34
2. children.txt (num, sexo (niño/niña), nombre, fecha de nacimiento, peso, altura, IdNumDeMadre) por ejemplo: 1 b Jackson 1999-10-15 3450 55 6

Lo único que puedo hacer es escribirlos todos como String[].

String child = "children.txt";
BufferedReader reader = null;
String line = "";

reader = new BufferedReader(new FileReader(child));
while ((line = reader.readLine()) != null){

    String[] row = line.split(",");

    for (String x : row){
        System.out.printf("%-10s", x );
    }
    System.out.println();
}
reader.close();

Tengo que encontrar al niño más alto, a la niña más pesada, y el día en que nacieron la mayoría de los niños.

¿Puedes ayudarme? Es la primera vez que trabajo con archivos .txt.
Gracias de antemano.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    ¡Sí, puedo ayudarte con esto! Aquí están los pasos que puedes seguir:

    1. Crea objetos de clase para madres e hijos utilizando la información en los archivos .txt. Puedes usar BufferedReader y FileReader de Java para leer los archivos y el método String.split() para dividir los valores en un array.

    Código de ejemplo para crear objetos de madre e hijo:

    class Madre {
        String numDeId;
        String nombre;
        int edad;
    
        public Madre(String numDeId, String nombre, int edad) {
            this.numDeId = numDeId;
            this.nombre = nombre;
            this.edad = edad;
        }
    }
    
    class Hijo {
        String num;
        String sexo;
        String nombre;
        String fechaDeNacimiento;
        int peso;
        int altura;
        String numDeIdDeMadre;
    
        public Hijo(String num, String sexo, String nombre, String fechaDeNacimiento, int peso, int altura, String numDeIdDeMadre) {
            this.num = num;
            this.sexo = sexo;
            this.nombre = nombre;
            this.fechaDeNacimiento = fechaDeNacimiento;
            this.peso = peso;
            this.altura = altura;
            this.numDeIdDeMadre = numDeIdDeMadre;
        }
    }
    
    1. Crea ArrayLists para los objetos de madres e hijos para almacenar la información en memoria.

    Código de ejemplo para leer datos de los archivos .txt y almacenarlos en ArrayLists:

    String archivoDeMadres = "madres.txt";
    String archivoDeHijos = "hijos.txt";
    BufferedReader lector;
    String linea;
    ArrayList<madre> madres = new ArrayList<>();
    ArrayList<hijo> hijos = new ArrayList<>();
    
    // Lee del archivoDeMadres y crea los objetos de Madre
    lector = new BufferedReader(new FileReader(archivoDeMadres));
    while ((linea = lector.readLine()) != null) {
        String[] fila = linea.split(",");
    
        Madre madre = new Madre(fila[0].trim(), fila[1].trim(), Integer.parseInt(fila[2].trim()));
        madres.add(madre);
    }
    lector.close();
    
    // Lee del archivoDeHijos y crea los objetos de Hijo
    lector = new BufferedReader(new FileReader(archivoDeHijos));
    while ((linea = lector.readLine()) != null) {
        String[] fila = linea.split(",");
    
        Hijo hijo = new Hijo(fila[0].trim(), fila[1].trim(), fila[2].trim(), fila[3].trim(), Integer.parseInt(fila[4].trim()), Integer.parseInt(fila[5].trim()), fila[6].trim());
        hijos.add(hijo);
    }
    lector.close();
    
    1. Utiliza un bucle o stream para realizar los cálculos requeridos en los objetos en memoria.

    Código de ejemplo para encontrar al niño más alto:

    Optional<hijo> niñoMásAlto = hijos.stream()
            .filter(hijo -> hijo.sexo.equalsIgnoreCase("niño"))
            .max(Comparator.comparingInt(hijo -> hijo.altura));
    if (niñoMásAlto.isPresent()) {
        System.out.println("Niño más alto: " + niñoMásAlto.get().nombre);
    } else {
        System.out.println("No se encontraron niños");
    }
    

    Código de ejemplo para encontrar a la niña más pesada:

    Optional<hijo> niñaMásPesada = hijos.stream()
            .filter(hijo -> hijo.sexo.equalsIgnoreCase("niña"))
            .max(Comparator.comparingInt(hijo -> hijo.peso));
    if (niñaMásPesada.isPresent()) {
        System.out.println("Niña más pesada: " + niñaMásPesada.get().nombre);
    } else {
        System.out.println("No se encontraron niñas");
    }
    

    Código de ejemplo para encontrar el día en que nacieron la mayoría de los niños:

    HashMap<string, integer=""> conteoPorFechaDeNacimiento = new HashMap<>();
    for (Hijo hijo : hijos) {
        String fechaDeNacimiento = hijo.fechaDeNacimiento.trim();
        conteoPorFechaDeNacimiento.put(fechaDeNacimiento, conteoPorFechaDeNacimiento.getOrDefault(fechaDeNacimiento, 0) + 1);
    }
    
    Optional<><string, integer="">> entradaConMáximo = conteoPorFechaDeNacimiento.entrySet()
            .stream()
            .max(Map.Entry.comparingByValue());
    
    if (entradaConMáximo.isPresent()) {
        System.out.println("La mayoría de los niños nacieron el: " + entradaConMáximo.get().getKey() + " (" + entradaConMáximo.get().getValue() + " niños)");
    } else {
        System.out.println("No se encontraron nacimientos");
    }
    

    ¡Espero que esto ayude! Avísame si tienes alguna pregunta.</string,></string,>

Comments are closed.