Поиск слова в текстовых файлах
Делаю небольшую програму для работы с текстом. Хочу реализовать поиск введённого пользователем слова во всех текстовых файлах в каталоге. Как это можно сделать? Нашёл несколько вариантов, которые ищут слова в одном конкретном файле, а как это можно сделать во всех файлах каталога? Есть какие-то примеры или исходники, где это реализовано?
Вот поиск в одном файле, который у меня есть.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Searcher {
public static void main(String[] args) throws FileNotFoundException
{
File file = new File("resources\\Block-Tileentity List.txt");
Scanner scanner = new Scanner(file);
try {
while(scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] cols = line.split(" ");
if (cols[1].equals("Слово для поиска")) {
System.out.println(line);
}
}
} finally {
scanner.close();
}
}
}
Ответы (1 шт):
Автор решения: Alexandr
→ Ссылка
Как-то так:
package com.somepackage;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) throws IOException {
final var word = "word";
try (final var files =
Files.find(
Paths.get("/path"),
Integer.MAX_VALUE,
(p, basicFileAttributes) ->
findExtension(p.getFileName().toString()).stream()
.anyMatch(s -> s.equals("txt")))) {
files.forEach(p -> {
final var lines = getLines(p);
IntStream.range(0, lines.size())
.filter(i -> Arrays.asList(lines.get(i).split(" ")).contains(word))
.forEach(i -> System.out.println("File: [" + p.getFileName() + "], line number: [" + (i + 1) + "], line: [" + lines.get(i)+ "]."));
});
}
}
public static Optional<String> findExtension(String fileName) {
return Optional.of(fileName.lastIndexOf('.'))
.filter(i -> i >= 0)
.map(i -> fileName.substring(i + 1));
}
public static List<String> getLines(Path p) {
try (final var lines = Files.lines(p)) {
return lines.collect(Collectors.toList());
} catch (IOException ex) {
throw new RuntimeException("Unexpected error occurred.");
}
}
}