import java.io.*; public class Calculo { public static void main(String[] args) throws IOException { String s; int lineas = 1; try { System.out.print("Que archivo desea analizar ? "); BufferedReader stdin = new BufferedReader( new InputStreamReader(System.in)); String archivo = stdin.readLine(); BufferedReader sarchivo = new BufferedReader( new FileReader(archivo)); while (( s = sarchivo.readLine()) != null) lineas++; System.out.println("El archivo " + archivo + " contiene " + lineas + " renglones de Codigo."); } catch (IOException exc) { System.err.println(exc); System.out.println("Asegurese de haber proporcionado " + " la extension del archivo (\".java\")"); } finally { System.out.println(""); System.out.println("Es la mejor manera de aprender Streams, practicando!"); } } } |
Esta Clase esta diseñada para interrogar al usuario sobre determinado archivo, leer su contenido y finalmente indicar al usuario el número de renglones que contiene; consta únicamente de su método principal (main
) y un bloque try/catch/finally.
De inicio son definidos dos campos para utilizarse dentro del método principal (main
) .
Posteriormente se define el bloque try/catch/finally con las siguientes características:
try
Se despliega una pregunta al usuario para que proporcione el nombre del archivo a leer.
Es definida una Clase del tipo BufferedReader
la cual permite archivar datos temporales en memoria ("Buffer")
El argumento que recibe al ser generada la Clase anterior es otra Clase llamada InputStreamReader
, la cual permite leer datos de un "Stream", en este caso siendo System.in
que representa el shell de ejecución.
Se extrae el nombre del archivo a través del método readLine()
y es asignado a una referencia de String
.
Es generada una nueva instancia de la Clase BufferedReader
a la cual será asignada el archivo en cuestión.
El argumento que recibe al ser generada la Clase anterior es otra Clase llamada FileReader
, la cual contiene los mecanismos necesarios para leer un Archivo, y en este caso recibiendo el nombre del archivo.
Se entra en un ciclo while el cual permanecerá activo hasta que el resultado del método readLine()
sobre la referencia definida anteriormente equivalga a null
. NOTA: El método readLine
retorna un resultado null
ya que el archivo no contenga lineas.
Dentro de cada iteración de ciclo se incrementa la variable (primitivo) lineas
la cual representa el número de lineas en el archivo.
Finalmente se envía a pantalla el resultado obtenido del ciclo.
catch
Dentro de está sección del Bloque se intenta atrapar un error ("Exception") del tipo IOException
, este tipo de error es generado al no poderse iniciar lectura/escritura en un programa.
En este programa el error sería generado al intentarse leer un archivo inexistente proporcionado por el usuario.
En caso de generarse este error, se envía a pantalla una sugerencia así como el error completo.
finally
Esta sección del Bloque describe instrucciones que siempre deben ser ejecutadas independientemente de ser generado un error ("Exception") o no.
Se imprime a pantalla un mensaje cada vez que sea ejecutado el programa, ocurra o no ocurra un error ("Exception").
En la siguiente sección será descrito el uso de "Streams" para escribir hacia archivos.