Groovy, Java

Leyendo archivos de texto desde Groovy

Hoy en el trabajo necesitaba obtener aquellos tiempos altos en funciones de Oracle que se llaman desde una aplicación web en Java. Dicha aplicación utiliza log4j y graba en el log el tiempo que tarda en ejecutar una función.

Por ejemplo, en dicho log podemos encontrar lineas como esta, siendo la marcada en amarillo la de especial interés,

De esta forma, requería estar leyendo muchos logs de más de 10000 lineas en busca de funciones cuyo tiempo sobrepasara los 2000 milisegundos.

La verdad es que no había utilizado antes Groovy y de momento se me ocurrió investigar en como podría hacer lo anterior, llegando a lo siguiente.

Como seguramente saben, Groovy es un lenguaje dinámico que corre sobre la JVM, por lo que es posible hacer uso de las mismas clases de Java.

Para leer un archivo basta con crear un objeto de la clase file e invocar al método eachLine que recibe un closure,

new File(name).eachLine( aqui closure )

Un closure es algo como un “método anonimo” y en Groovy se identifica por que esta encerrado entre signos de llaves {…….}

new File(name).eachLine(){line ->
def i = line.indexOf(“Time(spring)”)

En el código anterior, abrimos el archivo de texto y ejecutamos el método eachLine para iterar por cada línea que contenga el archivo. El método eachLine al obtener una línea del archivo la “depositara” en la variable “line” que será de tipo String y entonces será como podremos posteriormente utilizar el método indexOf.

Para mejores ejemplos sobre un closure, consultar aqui

El código completo es el siguiente:

Una vez medio entendiendo los closures el código de arriba es fácil de digerir, aunque realmente como tal es casi mi primer pinino en Groovy pues la verdad no me he metido con él!

Saludos!!