Preciso de ajuda para fazer um código

Boa tarde. Eu gostaria de escrever um código para pesquisar uma palavra em vários arquivos txt em um diretório.
O problema é que meu diretório tem outros arquivos que não são .txt. Eu gostaria de fazer um filtro para que ele só leia os .txt, procure a palavra e me diga o nome dos arquivos em que essa palavra se repete.

Boas,

public static void main(String[] args) {

    Scanner obj = new Scanner(System.in);

    File pasta = new File("c:\\teste\\");
    File[] listaFicheiros = pasta.listFiles();
    System.out.println("Introduza nome do ficheiro a pesquisar");
    String texto = obj.nextLine();
    
    for (File file : listaFicheiros) {
        if (file.isFile() && file.getName().contains(texto) && file.getName().matches("([^\\s]+(\\.(?i)(txt))$)")) {
            System.out.println(file.getName());
        }
    }
}
1 curtida

Se o conteúdo dos arquivos não for muito extenso, daria para fazer algo assim:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;

public class Main {
  private static List<String> searchInFiles(String directoryName, String word) {
    try (Stream<Path> stream = Files.walk(Path.of(directoryName))) {
      return stream // @formatter:off
        .filter(Files::isRegularFile)
        .filter(path -> path.toString().endsWith(".txt"))
        .filter(path -> {
          try {
            return Files.readString(path).contains(word);
          } catch(IOException e) {
            return false;
          }
        })
        .map(Path::toString)
        .toList(); // @formatter:on
    } catch (IOException e) {
      return Collections.emptyList();
    }
  }

  public static void main(String... args) throws Exception {
    System.out.println(searchInFiles(".", "a"));
  }
}
2 curtidas