Número de líneas de un fichero

20/Nov/2006 Java , , , , , , 23 Comentarios

La idea de este ejemplo es contar el número de líneas que tiene un fichero de texto utilizando las librerias Java IO del lenguaje Java. La forma en la que lo vamos a resolver no es la más optima, si bien es la más sencilla de implementar y entender.

De inicio deberemos de tener un fichero de texto con contenido. A dicho fichero lo llamaremos fichero.txt. Para abrir este fichero utilizaremos la clase FileReader. Con dicha clase obtendremos una referencia sobre el fichero que queremos conocer su número de líneas. Veamos la línea de código:

  1. FileReader fr = new FileReader("fichero.txt");

Lo siguiente que vamos a hacer es leer el contenido del mismo. Para ello no nos vale el FileReader y nos tendremos que apoyar en un buffer. En este caso usamos un BufferedReader, el cual espera como parámetro la referencia que tenemos sobre el. Esta será nuestra línea de código:

Apoyandonos en el método .readLine() del buffer, podremos ir leyendo el contenido de cada una de las filas del fichero. Esta lectura la podemos hacer mediante un bucle hasta que el contenido de la lectura sea null. Esto querra decir que ya no hay más contenido en el fichero.

En cada una de las lecturas de línea iremos incrementando un contador, el cual lleva la cuenta de las líneas del fichero

  1. long lNumeroLineas = 0;
  2.  
  3. while ((sCadena = bf.readLine())!=null) {
  4. lNumeroLineas++;
  5. }

En este proceso tenemos que tener especial cuidado con dos excepciones. La primera es FileNotFoundException. Esta se producirá si el nombre del fichero sobre el que queremos obtener la referencia, no existe. La segunda será IOException. Esta execpión es lanzada si se tienen problemas en el acceso al propio fichero o stream de entrada. Es por ello que todo nuestro código deberá de estar en un bucle try-catch que controle dichas excepciones.

  1. try{
  2. //Código
  3. } catch (FileNotFoundException fnfe){
  4. fnfe.printStackTrace();
  5. } catch (IOException ioe){
  6. ioe.printStackTrace();
  7. }

Solo nos quedará el mostrar por pantalla el número de líneas que hemos acumulado. Para ello necesitaremos la siguiente línea de código:

  1. System.out.println("El fichero tiene " + lNumeroLineas + " lineas");

Vídeos sobre Java IO


23 comentarios en “Número de líneas de un fichero”

Víctor Cuervo

Número de líneas de un fichero con un Stream - Línea de Código

[…] el ejemplo Número de líneas de un fichero con Java veíamos como podíamos calcular el número de líneas que contenía el fichero leyendo el […]

Víctor Cuervo

jc

buenas necesito ayuda.!
estoy creando un compilador y necesito que en mi JtextArea se muestre el numero de linea por el que voy o en la que me encuentro. como un compilador normal para asi hacerle ver al usuario en que linea se encuentra el error
de ante mano muchas gracias.!

Víctor Cuervo

Víctor Cuervo

Buenas,

La posición te la da el caret (el cursor). Para ello tienes que obtener su posición y luego transformarlo a la línea. Algo así:

JTextArea editArea = ....;
int caretpos = editArea.getCaretPosition();
linenum = editArea.getLineOfOffset(caretpos);

Es recomendable que lo hagas mediante un CaretListener, que será el evento lanzado cada vez que se mueva el cursor.

Espero que te haya orientado. Vamos a intentar poner un ejemplo en Línea de Código sobre esto.

Saludos.

Víctor Cuervo

Zoker

Buen día,

También existe la posibilidad de saber cúal es la cantidad de líneas sin necesidad de recorrer todo buffer.

Ejemplo:

bf.lines().count();

Víctor Cuervo

Víctor Cuervo

Muy buen apunte Zoker. Muchas gracias.

Víctor Cuervo

REDSUITHEART

FileReader fr = new FileReader("fichero.txt");
BufferedReader bf = new BufferedReader(fr);
long lNumeroLineasVacias = 0;
while ((sCadena = bf.readLine())!=null)
{
if(sCadena.equals(""))
{
lNumeroLineasVacias++;
}
}

Víctor Cuervo

GReG

Hola, que tal.

Muy interesante tu codigo, me gustaria preguntarte algo. Y si quisiera contar las lineas vacias ¿Como seria el codigo? ahi si me rompe la cabeza u.u

Saludos.

Víctor Cuervo

Víctor Cuervo

@REDSUITHEART,

Tendría que crear tantos FileReader como ficheros quieras leer.
Me parece un buen ejemplo para explicar en Línea de Código. Te avisamos cuando lo podamos publicar.

Víctor Cuervo

REDSUITHEART

¿Y si deseara examinar las lineas de codigo de mas de un archivo a la vez que podria hacer?

Es decir, deseo seleccionar varios archivos *.java para contar las lineas al mismo tiempo, no de un archivo a la vez.

Víctor Cuervo

Víctor Cuervo

@Darwin,

Perdona, no entiendo muy bien la pregunta. Si tienes un arreglo con los datos, simplemente tendrás que volcar el índice de dicha posición en el array.

Por ejemplo puedes volcar todas las posiciones de un array:

char array[];
array = new char[10];
 
for (int x=0;x<array.length;x++) {
    System.out.println (array[x]);
}

Y también puedes ver el manual java sobre arrays
http://www.manualweb.net/java/arrays-en-java/

Víctor Cuervo

Darwin

@Víctor Cuervo,

Gracias eso del hashMap era lo que necesitaba… otra cosa? se que java no permite sobrecarga de operadores. pero como haria para mostrar cuantas veces se repite una palabra determinada?

suponiendo que la palabra hola se repitio 1000 veces,

quisiera hacer algo como: System.out.print(arreglo[“hola”])
la salida seria 1000

que me sugieren usar???

Víctor Cuervo

Víctor Cuervo

@Darwin,

Puedes contar las ocurrencias de cada palabra como indicábamos en
http://lineadecodigo.com/java/numero-de-ocurrencias-en-un-array/

Si te atascas puedes preguntar en nuestro foro de Java File:
http://www.dudasprogramacion.com/forum/java-file

Yo me pondré manos a la obra a ver si lo podemos publicar en la web.

Víctor Cuervo

Darwin

Hola necesito ayuda.. tengo que hacer un programa en java que dado un archivo diga las 500 palabras que mas se repiten en el texto..

Alguna idea de como puedo hacer eso????????????

Víctor Cuervo

veronica

Soy nueva en esto:).

Víctor Cuervo

veronica

Hola buenas a todos!necesito ayuda con Java. me han pedido hacer un tad diccionario con el metodo cargar(D: in out Diccionario;F:in string) que añade al diccionario D la lista de palabras almacenadas en el fichero de texto F. En el fichero hay un palabra por linea y cada palabra tiene, como maximo 25 caracteres.

Les agradeceria si alguien me puede ayudar.
saludos.

Víctor Cuervo

Troll

Mariquita quien lo vuelva a leer!

Víctor Cuervo

Troll

Maricquita quien lo lea!

Víctor Cuervo

Miguel Angel

Tengo que darte las gracias. Por que sin la ayuda de tu código no hubiese podido hacer este trabajo.

el programa lo que hace es contar la cantidad de palabras dentro de un archivo de texto plano.

Por cierto lo hice en linux, así que lo único que deberían cambiar los que lo deseen utilizar, sería la ruta de el archivo.

No está de más decir que en Windows deben de ponerle la extensión; aunque, En linux no es tan necesario a menos de que le pongan extensión a el archivo.

le dejé los nombres de las variables tal y como tu las dejaste, lo único que hice fue hacer un mix de tu programa de contar palabras en un string con el de contar las líneas (de hecho fue ahí en dónde me di cuenta… XD)
Aqui te dejo el codigo:

String scadena;
FileReader fr = new FileReader(“//home/miguelangel/texto”);
BufferedReader bf = new BufferedReader(fr);
long contpalabras=0;

while((scadena = bf.readLine())!=null)
{
StringTokenizer st = new StringTokenizer(scadena);
contpalabras += st.countTokens();
}

System.out.println(“Cantidad de palabras ” + contpalabras);

nuevamente reitero que este código no hubiese sido posible sin la ayuda de el autor de esta web.

De verdad Te lo agradezco.

Att: Miguel Angel

Nuevamente, muchas gracias

Víctor Cuervo

Alfredo

como seria el codigo completo??? porfavor!!!

Víctor Cuervo

Praiet

Para completar este código de manera correcta faltaría cerrar el lector de archivo.

Entre un try-catch para IOException:

bf.close();

Suerte 🙂

Víctor Cuervo

lineadecodigo

Pablo, me alegra que te haya servido. A ver si me acuerdo de ponerle el código fuente para que sea más sencillo utilizarlo.

Víctor Cuervo

pablo

gracias por esta algoritmo … fue muy util en un momento de urgencia!

Víctor Cuervo

alejandro

que buenoque pongan cosas tan utiles comoestas

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

*