Busqueda de cadenas de texto en archivos

aldaguer
25 de Febrero del 2004
Saludos a todos.
Soy muy nuevo en java y tengo ciertas dudas con respecto al tema de manejo de ficheros en java.

Tengo que realizar un ejercicio de un buscador de cadenas de texto en archivos ,con interficie gráfica.

El tema de la interficie lo tengo mas o menos listo, pero los problemas me han aparecido cuando tengo que abrir ficheros para poder leerlos, por lo que veo , me petan excepciones de que no encuentra el archivo, y la solución de la gente está en la declaracion del main añadiéndole "throws IOException", (yo tambien lo he hecho ) , ¿pero por que se hace?.

Y después, en otro hilo un compañero respondía como leer línea a línea un fichero de texto. La verdad es que no controlo muy bien este tema , yo pensaba pasar todo el texto del archivo a un buffer (vector) y sobre él realizar la busqueda , pero no tengo ni idea de como se hace.
De todas maneras si existe algún otro método mas sencillo os agradecería la ayuda.


Saludos a todos.

chuidiang
25 de Febrero del 2004
Si intentas abrir un fichero que no existe o para el que no tienes permisos, te salta una excepcion. Lo normal es que la captures para sacar un aviso en pantalla indicandolo. En pseudocodigo seria algo como esto

try
{
abrirFichero();
}
catch (IOException e)
{
muestraAviso ("No puedo abrir fichero");
}

El tema de abrir ficheros en java es un poco "puñetero". El programa se ejecuta en un directorio que puede no ser en el que está situado el usuario. Por ello, abrir un fichero indicando solo el nombre no es buena idea. Es mejor abrirlo indicando todo el path de alguna manera.

En cuanto a buscar subcadenas, una vez abierto el fichero (la clase RandomAccessFile te vendrá bien), puedes leer lineas completas con el metodo readLine(). La linea te la devuelven en cuna clase String. Esta clase tiene metodos que te ayudan a buscar. Por ejemplo

String cadena;
int posicion = cadena.indexOf ("hola");

Te devuelve la posicion dentro de cadena en la que se encuentra la subcadena "hola".

Se bueno.