Programa Java para buscar una palabra o una cadena en un
fichero de texto.
El programa pedirá que se introduzca una palabra o un texto
por teclado y realizará su búsqueda por todo el archivo. Se mostrará por
pantalla el número de línea y el contenido de la línea del fichero que contiene
la cadena buscada. Si la cadena buscada aparece en varias líneas se mostrarán
todas ellas. Si el fichero no contiene el texto buscado se mostrará un mensaje
indicándolo.
Por ejemplo, tenemos un fichero de texto llamado
TemaFicheros.txt con el siguiente contenido:
A partir de Java 7 se puede usar la instrucción try-with-resources.
Un resource (recurso) es un objeto que necesita ser cerrado.
Un try-with-resources asegura que estos objetos serán cerrados.
Un objeto AutoCloseable puede ser usado como recurso.
Si el texto a buscar es recurso el programa mostrará por pantalla:
Archivo: TemaFicheros.txt
Texto a buscar: recurso
Linea 2: Un resource (recurso) es un objeto que necesita ser cerrado.
Linea 4: Un objeto AutoCloseable puede ser usado como recurso.
Si el texto a buscar ahora es array el programa mostrará por pantalla:
Archivo: TemaFicheros.txt
Texto a buscar: array
array no se ha encontrado en el archivo
Solución:
Para resolver el ejercicio de búsqueda de texto en
ficheros leeremos el fichero línea a línea utilizando la clase Scanner. Para
cada línea se comprueba si contiene o no el texto buscado, si la línea contiene
lo que buscamos se muestra por pantalla junto a su número de línea. Para
obtener el número de línea utilizaremos un contador que se incrementa cada vez
que se lea una nueva línea desde el archivo. Se utilizará una variable de tipo
boolean para saber si se ha encontrado o no el texto buscado.
Código
del programa Java de búsqueda de texto en archivos:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import javax.swing.JFileChooser;
public class BurcarTextoEnArchivo {
public static void main(String[] args) {
Scanner entrada = null;
String linea;
int numeroDeLinea = 1;
boolean contiene = false;
Scanner sc = new Scanner(System.in);
//Para seleccionar el archivo
JFileChooser j = new JFileChooser();
j.showOpenDialog(j);
//Introducimos el texto a buscar
System.out.print("Introduce texto a buscar: ");
String texto = sc.nextLine();
try {
//guardamos el path del fichero en la variable ruta
String ruta = j.getSelectedFile().getAbsolutePath();
//creamos un objeto File asociado al fichero seleccionado
File f = new File(ruta);
//creamos un Scanner para leer el fichero
entrada = new Scanner(f);
//mostramos el nombre del fichero
System.out.println("Archivo: " + f.getName());
//mostramos el texto a buscar
System.out.println("Texto a buscar: " + texto);
while (entrada.hasNext()) { //mientras no se llegue al final del fichero
linea = entrada.nextLine(); //se lee una línea
if (linea.contains(texto)) { //si la línea contiene el texto buscado se muestra por pantalla
System.out.println("Linea " + numeroDeLinea + ": " + linea);
contiene = true;
}
numeroDeLinea++; //se incrementa el contador de líneas
}
if(!contiene){ //si el archivo no contienen el texto se muestra un mensaje indicándolo
System.out.println(texto + " no se ha encontrado en el archivo");
}
} catch (FileNotFoundException e) {
System.out.println(e.toString());
} catch (NullPointerException e) {
System.out.println(e.toString() + "No ha seleccionado ningún archivo");
} catch (Exception e) {
System.out.println(e.toString());
} finally {
if (entrada != null) {
entrada.close();
}
}
}
}//Fin programa de búsqueda de texto en un archivo
Siempre sale que la palabra no se ah encontrado en el archivo cuando en realidad si se enccuntra que error tendria el codigo???
ResponderEliminarHola Javier, el programa funciona bien. Revisa tu código y asegúrate que las llaves están bien colocadas y no te falta ninguna instrucción.
Eliminarhola si quisiera buscar palabras en un archivo word o pdf como se podria hacer
ResponderEliminarEl buscador tiene en cuenta si la palabra que buscabas tenia mayusculas o minusculas y no funciona con tildes.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarDejo mi versión en donde además de buscar la linea donde están las palabras también nos dice cuantas palabras hay.
ResponderEliminarprivate static void buscarTexto() {
try (FileReader fr = new FileReader(archivo);
BufferedReader br = new BufferedReader(fr)) {
System.out.println("Introduce un texto para buscar");
String buscar = sn.nextLine();
String linea = br.readLine();
int contLineas = 0;
int contPalabras = 0;
while (linea != null) {
StringTokenizer st = new StringTokenizer(linea, " ,.");
contLineas++;
while (st.hasMoreTokens()) {
if (st.nextToken().equalsIgnoreCase(buscar)) {
contPalabras++;
System.out.println(buscar + " aparece en la linea "
+ contLineas);
}
}
linea = br.readLine();
}
if (contPalabras > 0) {
System.out.println("La palabra " + buscar + " aparece: "
+ contPalabras + " veces");
} else {
System.out.println("No se ha encontrado esa palabra");
}
} catch (FileNotFoundException e) {
System.out.println("Archivo no encontrado " + e.getMessage());
} catch (IOException e) {
System.out.println("Error de lectura " + e.getMessage());
}
}
Hola, como se podria poner estas lineas de codigo, dentro de un metodo??
ResponderEliminarhola por que aunque los archivos contengan el texto me dice que no se encontro, lo copie tal y cual de la pagina
ResponderEliminar