Buscar palabras o cadenas de texto en un archivo

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

8 comentarios:

  1. Siempre sale que la palabra no se ah encontrado en el archivo cuando en realidad si se enccuntra que error tendria el codigo???

    ResponderEliminar
    Respuestas
    1. Hola 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.

      Eliminar
  2. hola si quisiera buscar palabras en un archivo word o pdf como se podria hacer

    ResponderEliminar
  3. El buscador tiene en cuenta si la palabra que buscabas tenia mayusculas o minusculas y no funciona con tildes.

    ResponderEliminar
  4. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  5. Dejo mi versión en donde además de buscar la linea donde están las palabras también nos dice cuantas palabras hay.
    private 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());
    }
    }

    ResponderEliminar
  6. Hola, como se podria poner estas lineas de codigo, dentro de un metodo??

    ResponderEliminar
  7. hola por que aunque los archivos contengan el texto me dice que no se encontro, lo copie tal y cual de la pagina

    ResponderEliminar