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