Contar Lineas y Leer Fichero

Iniciado por <<<-Basura->>>, 2 Noviembre 2012, 07:43 AM

0 Miembros y 1 Visitante están viendo este tema.

<<<-Basura->>>

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 (java) [Seleccionar]

        try{
            // Abrimos el archivo
            FileInputStream fstream = new FileInputStream("registros.txt");
            // Creamos el objeto de entrada
            DataInputStream entrada = new DataInputStream(fstream);
            // Creamos el Buffer de Lectura
            BufferedReader buffer = new BufferedReader(new InputStreamReader(entrada));
            String strLinea;
            // Contar lineas
            while ((strLinea = buffer.readLine())!=null) {
              NumeroLineas++;
            }
            // Leer el archivo linea por linea
            while ((strLinea = buffer.readLine()) != null)   {
                // Imprimimos la línea por pantalla
                System.out.println (strLinea);
            }
            // Cerramos el archivo
            entrada.close();
        }catch (Exception e){ //Catch de excepciones
            System.err.println("Ocurrio un error: " + e.getMessage());
        }
<<<--Basura-->>>

Valkyr

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 (java) [Seleccionar]

try{
            // Abrimos el archivo
            FileInputStream fstream = new FileInputStream("registros.txt");
            // Creamos el objeto de entrada
            DataInputStream entrada = new DataInputStream(fstream);
            // Creamos el Buffer de Lectura
            BufferedReader buffer = new BufferedReader(new InputStreamReader(entrada));
            String strLinea;
            // Contar lineas
            // Leer el archivo linea por linea
            while ((strLinea = buffer.readLine())!=null) {
              NumeroLineas++;
                // Imprimimos la línea por pantalla
                System.out.println (strLinea);
            }
            // Cerramos el flujo.
            entrada.close();
        }catch (Exception e){ //Catch de excepciones
            System.err.println("Ocurrio un error: " + e.getMessage());
        }

Nasty35

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 (java) [Seleccionar]
try{
            // Abrimos el archivo
            FileInputStream fstream = new FileInputStream("registros.txt");
            // Creamos el objeto de entrada
            DataInputStream entrada = new DataInputStream(fstream);
            // Creamos el Buffer de Lectura
            BufferedReader buffer = new BufferedReader(new InputStreamReader(entrada));
            String strLinea;
            // Contar lineas
            while ((strLinea = buffer.readLine())!=null) {
              NumeroLineas++;
            }
            buffer.mark(0); // empieza a leer desde el principio
            // Leer el archivo linea por linea
            while ((strLinea = buffer.readLine()) != null)   {
                // Imprimimos la línea por pantalla
                System.out.println (strLinea);
            }
            // Cerramos el archivo
            entrada.close();
        }catch (Exception e){ //Catch de excepciones
            System.err.println("Ocurrio un error: " + e.getMessage());
        }

Fireball-CH

Qué tal, amigo!

A mí me funciona de esta manera:
    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;
    }
Video en el que explico cómo instalar y configurar Apache 2.0.54, PHP 5.0.0 y MySQL 4.0.20: http://www.mediafire.com/?fevmmnlyzzd

<<<-Basura->>>

<<<--Basura-->>>

HalconEye

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

Todo lo que digan que somos,
lo somos y aún peor.