Foro de elhacker.net

Programación => Java => Mensaje iniciado por: <<<-Basura->>> en 2 Noviembre 2012, 07:43 am



Título: Contar Lineas y Leer Fichero
Publicado por: <<<-Basura->>> en 2 Noviembre 2012, 07:43 am
Buenas Tengo el siguiente código, tiene un problema que es que quiero leer las lineas del fichero o saber cuantas lineas tiene el fichero antes de comenzar a leerlo.

Pero cuando lo hago, tengo el pequeño problema que si me cuenta las lineas no me lee el fichero, no se que hacer, AYUDA!!

Código
  1.        try{
  2.            // Abrimos el archivo
  3.            FileInputStream fstream = new FileInputStream("registros.txt");
  4.            // Creamos el objeto de entrada
  5.            DataInputStream entrada = new DataInputStream(fstream);
  6.            // Creamos el Buffer de Lectura
  7.            BufferedReader buffer = new BufferedReader(new InputStreamReader(entrada));
  8.            String strLinea;
  9.            // Contar lineas
  10.            while ((strLinea = buffer.readLine())!=null) {
  11.              NumeroLineas++;
  12.            }
  13.            // Leer el archivo linea por linea
  14.            while ((strLinea = buffer.readLine()) != null)   {
  15.                // Imprimimos la línea por pantalla
  16.                System.out.println (strLinea);
  17.            }
  18.            // Cerramos el archivo
  19.            entrada.close();
  20.        }catch (Exception e){ //Catch de excepciones
  21.            System.err.println("Ocurrio un error: " + e.getMessage());
  22.        }
  23.  


Título: Re: Contar Lineas y Leer Fichero
Publicado por: Valkyr en 3 Noviembre 2012, 12:44 pm
Estás repitiendo el bucle dos veces de manera innecesaria, y además es incorrecto, ya que una vez que has llegado al fin de archivo (readLine devuelve null) no puedes seguir leyéndolo a no ser que reinicies la entrada de datos.

Código
  1. try{
  2.            // Abrimos el archivo
  3.            FileInputStream fstream = new FileInputStream("registros.txt");
  4.            // Creamos el objeto de entrada
  5.            DataInputStream entrada = new DataInputStream(fstream);
  6.            // Creamos el Buffer de Lectura
  7.            BufferedReader buffer = new BufferedReader(new InputStreamReader(entrada));
  8.            String strLinea;
  9.            // Contar lineas
  10.            // Leer el archivo linea por linea
  11.            while ((strLinea = buffer.readLine())!=null) {
  12.              NumeroLineas++;
  13.                // Imprimimos la línea por pantalla
  14.                System.out.println (strLinea);
  15.            }
  16.            // Cerramos el flujo.
  17.            entrada.close();
  18.        }catch (Exception e){ //Catch de excepciones
  19.            System.err.println("Ocurrio un error: " + e.getMessage());
  20.        }
  21.  


Título: Re: Contar Lineas y Leer Fichero
Publicado por: Nasty35 en 4 Noviembre 2012, 22:57 pm
Hola, no se si funciona pero prueba a ejecutar la función mark, indicándole el integer 0, para que reinicie hasta la línea cero:
Código
  1. try{
  2.            // Abrimos el archivo
  3.            FileInputStream fstream = new FileInputStream("registros.txt");
  4.            // Creamos el objeto de entrada
  5.            DataInputStream entrada = new DataInputStream(fstream);
  6.            // Creamos el Buffer de Lectura
  7.            BufferedReader buffer = new BufferedReader(new InputStreamReader(entrada));
  8.            String strLinea;
  9.            // Contar lineas
  10.            while ((strLinea = buffer.readLine())!=null) {
  11.              NumeroLineas++;
  12.            }
  13.            buffer.mark(0); // empieza a leer desde el principio
  14.            // Leer el archivo linea por linea
  15.            while ((strLinea = buffer.readLine()) != null)   {
  16.                // Imprimimos la línea por pantalla
  17.                System.out.println (strLinea);
  18.            }
  19.            // Cerramos el archivo
  20.            entrada.close();
  21.        }catch (Exception e){ //Catch de excepciones
  22.            System.err.println("Ocurrio un error: " + e.getMessage());
  23.        }


Título: Re: Contar Lineas y Leer Fichero
Publicado por: Fireball-CH en 5 Noviembre 2012, 19:03 pm
Qué tal, amigo!

A mí me funciona de esta manera:
Código:
    private int calcular_longitud() throws IOException {
        File fichero = new File("Fichero.txt");
        FileReader fr = new FileReader(fichero);
        BufferedReader br = new BufferedReader(fr);
        String s;
        int longitud = 0;

        while((s = br.readLine()) != null)
            longitud++;

        br.close();
        br = null;      // Libera memoria
        fr.close();
        fr = null;      // Libera memoria
        fichero = null; // Libera memoria

        return longitud;
    }


Título: Re: Contar Lineas y Leer Fichero
Publicado por: <<<-Basura->>> en 25 Noviembre 2012, 09:58 am
Gracias a todos, ya lo logre.


Título: Re: Contar Lineas y Leer Fichero
Publicado por: HalconEye en 29 Noviembre 2012, 23:00 pm
package leer_fichero;

public class Leer_Fichero {
//Muestra cómo obtener la longitud de una cadena de caracteres e investiga
   //la posición de un determinado caracter.
   /**Se aprovecharán varios métodos de la clase String para realizar las
    * operaciones sobre las cadenas de caracteres,tales como calcular su longitud,
    * extraer determinados caracteres o bien investigar qué caracter ocupa la
    * posición inicial o final de la cadena.En este ejercicio creo el objeto nombre
    * de la clase String al que se le asigna la cadena de caracteres "Bukanero".
    * El método lenght calcula la longitud de esta cadena.
 * El método indexOf("a") investiga en qué posición está la primera letra "a",empezando
    * por la izquierda
    *
    */
   public static void main(String[] args) {
      // TODO Auto-generated method stub
String nombre;
nombre = "Bukanero";
System.out.print(" El nombre " + nombre + " tiene " + nombre.length() + " caracteres\n ");
System.out.print(" El nombre " + nombre + " tiene la letra 'a' en la posición " +
      nombre.indexOf("a") + "\n");
System.out.println("Empieza por:"+ nombre.substring(0,1));
System.out.print("Termina por:" + nombre.substring(7));
   }

}

Y al ejecutarlo aparecerá esto:

El nombre Bukanero tiene 8 caracteres
  El nombre Bukanero tiene la letra 'a' en la posición 3
Empieza por:B
Termina por:o