La entrada de hoy va a ser más breve, por su temática mayormente práctica. La clase BufferedReader es una de las más usadas en java, pero su utilización se aprende más a través de ejemplos que enrollándonos con un montón de teoría.
Aún así, para los que no la conozcáis, os diré que BufferedReader pertenece al paquete java.io y se utiliza para "leer" archivos. Pero no se le puede pasar un archivo directamente como argumento al constructor, por que no lo admite, así que primero hay que crear un FileReader, que admite tanto archivos como Strings, y luego este FileReader será el argumento del constructor del BufferedReader. Si esto os parece muy lioso, veréis como se entiende mejor con un ejemplo.
Supongamos que tenéis un archivo que queréis leer, y no sólo eso, si no que después queréis trabajar con él y para ello necesitáis convertirlo en un ArrayList o un Array, o incluso separarlo en partes. Todo eso lo veremos con el siguiente ejemplo.
Yo he creado un mini-archivo para utilizar aquí, pero vosotros podéis usar alguno vuestro, todo lo amplio que queráis. El mío consiste en unas definiciones de unas palabras gallegas tomadas de un diccionario (no pasa nada si no entendéis gallego, lo importante es que comprendáis el código que viene luego ;) ).
lercho, -a: (de lercha<prerrom.*liscola<*lisca<celta *vlisca = vara).adx. 1.Lingoreteiro, insolente. 2.Dise da persoa que fala máis do debido. 3.Indecente. 4.Lacazán, preguiceiro. 5.Dise da persoa que come e bebe demasiado.
leria: (lat.lerias<gr.leros).s.f. 1.Conversa informal(estanche de leria). 2.Chanza, broma (tes moita gana de leria). 3.Conto, enredo, chisme, maraña, lío (déixate de lerias).
leriante: (de leria). adx. e s. 1.Lercho. 2.Dise da persoa que é moi bromista ou da que ten moita labia.
lerio: (de leria). s.m. 1.Asunto no que hai algunha complicación (andar metido nun lerio). 2.Lío, maraña, enredo (non se decataron do lerio). 3.Caso (o peor do lerio é que entre eles non se entenden). 4.Chisme, cousa sen importancia.
import java.io.*; import java.util.*; import java.util.regex.*; public class Archivos{ public static void main(String[] args){ try{ //El constructor de BufferedReader no admite directamente un archivo //por eso usamos FileReader BufferedReader reader = new BufferedReader(new FileReader("voc.txt")); //Vamos ahora a convertir el reader en un ArrayList. // Nunca inicializéis String linea = reader.readLine() o dentro de // while se producirá un bucle infinito (puesto que linea nunca será nul String linea; List<String> arlist = new ArrayList<String>(); while((linea=reader.readLine())!= null){ arlist.add(linea); } System.out.println(arlist); //Si ahora quisiésemos convertir ese ArrayList en un Array, // haremos lo siguiente String[] s1 = arlist.toArray(new String[arlist.size()]); //Para separar el texto en dos array distintos String[] palabras; String[] definiciones; for (String st : arlist){ Pattern patrón = Pattern.compile("[(].+$"); palabras = patrón.split(st); System.out.println(palabras[0]); } for (String str : arlist){ Pattern patrón2 = Pattern.compile("[\\w]+:"); definiciones = patrón2.split(str); System.out.println(definiciones[1]); } //Nunca olvidéis cerrar el BufferedReader. reader.close(); }catch(IOException ioe){ System.out.println("Oh,oh"); }catch(PatternSyntaxException pse){ System.out.println("Oh,oh"); } } }
Como podéis ver, hemos utilizado también el paquete java.util.regex, que utiliza expresiones regulares para el manejo de texto. Conocer estas expresiones regulares es casi como aprenderse un lenguaje de programación nuevo. Para los que no sepáis nada del tema, podéis echar un ojo al tutorial de Oracle.
En este ejemplo, con el uso de las clases de regex hemos separado por un lado las palabras y por otro sus definiciones.
Espero que esta entrada os haya sido útil.
En este ejemplo, con el uso de las clases de regex hemos separado por un lado las palabras y por otro sus definiciones.
Espero que esta entrada os haya sido útil.
Muy buena explicación y excelente blog, muchas felicidades y le agradezco mucho Sonia
ResponderEliminarMuchas gracias por su amabilidad.
ResponderEliminarMe alegro de que le guste :-)
Muy bueno. Gracias!
ResponderEliminarmuy buena explicacion corta y concisa
ResponderEliminar