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!!
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());
}
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.
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());
}
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:
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());
}
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;
}
Gracias a todos, ya lo logre.
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