Foros del Web » Programación para mayores de 30 ;) » Java »

Cómo leer archivos?

Estas en el tema de Cómo leer archivos? en el foro de Java en Foros del Web. Hola y gracias de antemano por la colaboración. Tengo un problema y es el siguiente, tengo este código: Código: public Discotienda( String nombreArchivoDiscotienda ) throws ...
  #1 (permalink)  
Antiguo 04/02/2006, 16:17
 
Fecha de Ingreso: febrero-2006
Mensajes: 2
Antigüedad: 18 años, 3 meses
Puntos: 0
Cómo leer archivos?

Hola y gracias de antemano por la colaboración.

Tengo un problema y es el siguiente, tengo este código:

Código:
    public Discotienda( String nombreArchivoDiscotienda ) throws Exception
    {
        archivoDiscotienda = nombreArchivoDiscotienda;
        discos = new ArrayList( );
        
        cargarDiscotienda( new File( nombreArchivoDiscotienda ) );
        verificarInvariante( );

    }
    private void cargarDiscotienda( File archivo ) throws Exception
    {
        int numeroDiscosD;
        discos = new ArrayList();
        // Construyo el lector del archivo
        BufferedReader br = new BufferedReader( new FileReader( archivo ) );
        
        // Leo el número de discos del archivo
        String textoNumeroDiscos = br.readLine();
        
        // Si la cadena está vacía o es un comentario (empieza con #), paso a la siguiente linea
        while ( textoNumeroDiscos.startsWith("") || textoNumeroDiscos.startsWith("#") )
        {
            textoNumeroDiscos = br.readLine();
        }
        // Trato de leer el número de Discos
        try 
        {
            numeroDiscosD = Integer.parseInt( textoNumeroDiscos );
        
            for ( int i = 0; i < numeroDiscosD; i ++ )
            {
                //discos.add( new Disco( br ) );
            }
        }
        // So ocurriese algún problema leyendo el número de discos
        catch ( Exception e )
        {
            throw new Exception("No se puede leer el número de discos: " + e.getMessage());
        }

        verificarInvariante();
        br.close();
    }
Supuestamente debe leer un archivo y leer dentro de el la primera linea que no esté en blanco ni comienza con el caractér # que signifíca un comentario, pero el problema es que cuando trato de ejecutarla me sale la siguiente información:

java.lang.NullPointerException
at Discotienda.cargarDiscotienda(Discotienda.java:84)
at Discotienda.<init>(Discotienda.java:58)
at InterfazDiscotienda.main(InterfazDiscotienda.java: 311)

que me lleva a la linea
while ( textoNumeroDiscos.startsWith("") || textoNumeroDiscos.startsWith("#") )... del código.

Será que estoy haciendo algo mal?
  #2 (permalink)  
Antiguo 05/02/2006, 07:05
 
Fecha de Ingreso: febrero-2005
Mensajes: 396
Antigüedad: 19 años, 2 meses
Puntos: 1
parece mas o menos claro que la línea :

String textoNumeroDiscos = br.readLine();

está devolvuendo un objeto null, y por eso luego da el error. Comprueba que el fichero realmetnese está abriendo y leyendo.

Revisa la documentacion de los BufferedReader para ver en que ocasiones el readLine() da un null como resultado.

Zerjillo
  #3 (permalink)  
Antiguo 05/02/2006, 07:29
 
Fecha de Ingreso: febrero-2006
Mensajes: 2
Antigüedad: 18 años, 3 meses
Puntos: 0
Hola Zerjillo, Gracias por la ayuda!
Estuve revisando la documentación, y no encontré nada práctico sin embargo se me dio por cambiar las instrucciones:
while ( textoNumeroDiscos.startsWith("") || textoNumeroDiscos.startsWith("#") )
Por:
while ( textoNumeroDiscos.equals("") || textoNumeroDiscos.startsWith("#") )

Y funcionó!!!

Lo que pasa es que no debe leer una línea vacía, tal y como estába haciendo.
  #4 (permalink)  
Antiguo 05/02/2006, 08:08
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Hola,
La razon por la que antes te fallaba y ahora no no la se, pero desde el punto de vista de un error NullPointerException, es exactamente lo mismo.
Como bien te dice Zerjillo, el error ese significa que textoNumeroDiscos es igual a null, y por tanto da lo mismo que llames a startsWith o a equals que te lo dara igual.
Para evitar una NPE en cualquier caso tendrias que poner delante un...
if (textoNumeroDiscos!=null && ...
  #5 (permalink)  
Antiguo 07/02/2006, 10:04
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
estoy deacuerdo con GreenEyed

cuando no sabemos o no estamos 100% seguros de tener la informacion correcta es recomendable verificar que no sea NULL
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:30.