Dudas de Programacion » Java » Java Básico

Ficheros de texto en Java

(7 posts)
  • Started 1 year ago by sdh
  • Latest reply from filomeno.detal

Tags:

No tags yet.

  1. Hola, tengo una duda acerca de trabajo con ficheros de texto en Java:

    Tengo un fichero de texto de nombre [nombre] que almacena datos enteros, strings y caracteres, separados por comas.
    Una línea del fichero equivale a 1 alumno, con su dni, letra del dni, apellidos, nombre, telefono.

    Lo que quiero hacer es que al teclear un dni me aparezca la información asociada a ese alumno. Tengo esto:

    Scanner orden = new Scanner(entrada.nextLine().toUpperCase());
    if (orden.hasNextInt()) {
        		int x = orden.nextInt();
        		Alumno a = Gestors.buscarAlumno(nombre, DNI);
        		if (socio!=null)
        		System.out.printf("%6d - %s%n", a.dni(), a.nombre());
        		else
        		System.out.printf("Error");
    
        }
    
    public static Alumno buscarAlumno (String nombre, int DNI) {
            	try {
            	Scanner f = new Scanner(new File (nombre));
    
            	Alumno a = null;
            	boolean encontrado = false;
            	while (f.hasNextLine() && !encontrado) {
            	socio = leerAlumno(f);
            	encontrado = a.dni()==DNI;
            	}
            	if (encontrado) return a;
            	else return null;
            	}
            	catch (Exception e) { return null; }
            	} 

    Falta algo porque cuando ejecuto el programa siempre me sale error.

    Posted 1 year ago #


  2. Buenas,

    Sin entrar en si tu manera es mejor o peor, hay varias cosas que tienes incorrectas:

    - No veo el código del método leerAlumno()
    - El objeto Alumno a no se crea nunca por tanto siempre es null
    - La variable socio no esta ni declarada
    - DNI no deberia de ser un int, debería de ser un String y se compara mediante equals()

    Si al corregir todo eso te sigue dando error, pega el error que obtengas.

    Un saludo

    Saludos
    Posted 1 year ago #
  3.  private static Alumno leerAlumno(Scanner f) {
               int unDNI= f.nextInt();
               String unNombre = f.next();
    
            return new Alumno(unDNI,unNombre);
               } 

    -Se supone que no es if (socio!=null), sino if(a!=null).
    -DNI es un entero porque son números, tipo 1039293829.

    Posted 1 year ago #
  4. Buenas otra vez,

    El problema de "socio" y "a" lo tienes en mas sitios, como aquí:

    socio = leerAlumno(f);
    encontrado = a.dni()==DNI;

    Por otro lado, el DNI no es un número, ya que un DNI puede ser 039293829 y al guardarlo como int se perdería el 0 de la izquierda (además Java lo interpretaría como octal).

    Un saludo

    Posted 1 year ago #


  5. Mira, los codigos originales son estos, y a partir de aqui tngo q modificarlos segun digo abajo:
    -Método buscarAlumno
    Código:

    public static Alumno buscarAlumno (String nombre, int nip) {
    try {
    Scanner f = new Scanner(new File (nombre));
    
    Alumno alumno = null;
    boolean encontrado = false;
    while (f.hasNextLine() && !encontrado) {
    alumno = leerAlumno(f);
    encontrado = alumno.nip()==nip;
    }
    if (encontrado) return alumno;
    else return null;
    }
    catch (Exception e) { return null; }
    } 

    Método leerAlumno:
    Código:

    private static Alumno leerAlumno (Scanner f) {
    int nip = f.nextInt(); // Lee el valor del NIP
    f.skip(" "); // Salta un espacio en blanco
    return new Alumno(nip,f.nextLine());
    } 

    Y para ejecutar tengo esto:
    Código:

    Scanner orden = new Scanner(entrada.nextLine().toUpperCase());
    if (orden.hasNextInt()) {
    int nip = orden.nextInt();
    Alumno alumno = GestorFicheroAlumnos.buscarAlumno(nombre, nip);
    if (alumno!=null)
    System.out.printf("%6d - %s%n", alumno.nip(), alumno.nombre());
    else
    System.out.printf("El NIP %d no corresponde a ningún alumno%n", nip); } 

    Al ejecutar eso y poner un NIP (codigo tipo el DNI), me aparece x pantalla el NIP y el NOMBRE DEL ALUMNO al lado. Tengo que hacer lo mismo pero con un fichero de texto que almacena datos así:
    "DNI, LETRA DEL DNI, APELLIDOS, NOMBRE, TELEFONO"
    Separados por comas, ¿cómo modifico los métodos anteriores para presentar la información de cada socio por pantalla?:S

    Posted 1 year ago #
  6. Buenas,

    Evidentemente no voy a hacer tu trabajo/tarea, este foro no es para eso, es para resolver dudas.

    ¿Porque hay que usar esos métodos? es un copia/pega?

    Para recorrer un ficheros del tipo csv (coma separated values), bastaría con algo así:

     
    		Scanner sc = new Scanner(new File(rutaArchivo));
    		sc.useDelimiter(",");
    		while (sc.hasNext()) {
    		   String token = sc.next();
    		   System.out.println(token);
    		}
     

    Espero que te sirva,

    Un saludo

    Posted 1 year ago #
  7. filomeno.detal
    Member

    Muy buenas,

    Una recomendación importante; NUNCA pongas en tu código cosas del estilo de:
    ...
    } catch (Exception e) {
    return null;
    }
    ...

    Si tu códificación es errónea, nunca te enterarás de qué ha pasado realmente (NullPointerException, IOException, etc...), por lo que serás incapaz de depurarlo y te costará muchísimo solucionar el problema.

    Captura sólo las excepciones que realmente tienes que capturar y piensa muy bien cual sería el origen de esa excepción y como debería comportarse tu SW en en ese caso. Y cuando las captures, procura soltar siempre una traza suficientemente descriptiva. Por ejemplo, bastaría con algo como:
    ...
    } catch (LoQueSeaException e) {
    e.printStackTrace();
    ...
    }
    ...
    Si sigues estas simples normas en todos los sitios, verás como te costará muchísimo menos depurar tu código.

    Posted 1 year ago #



Reply

You must log in to post.

1,070 posts in 437 topics over 40 months by 388 of 892 members. Latest: lalala, nijh1, jasu

Acerca de...

Dudas de Programación es una Web, dentro del proyecto aulambra.com que nace con la idea de propocionar un foro de consultas sobre diferentes temas de programación. Orientado a ayudar a los internautas hispano-hablantes en Internet.

Ir al Blog de Linea de Código

Otras Webs