Обучение и трудоустройство Java-программистов от Junior до Senior

Поиск строки в логах.

0
06 сен 2017 03:44
Доброго дня, форумчанин!
Создал этот вопрос потому, что поиск аналогичного не принёс результатов (если я плохо искал, то буду признателен тебе за ссылку).
Суть в следующем:
Предположим, что существует папка, в которой существует ещё несколько папок, а в них, в свою очередь могут быть ещё папки и т.д.
В некоторых из этих папок существуют текстовые файлы.
1.Как может выглядеть алгоритм программы, который производил бы поиск одной определённой (введённой пользователем)строки во всех текстовых файлах, входящих в изначальную папку и во вложенные?
2.Возможно ли в такую программу встроить выборочный поиск по расширениям? (напр. : указать программе искать строку только в файлах с расширением .txt).
3.Каким образом эта программа указала бы мне в консоли пути к файлам, в которых эта строка(или даже несколько) нашлись?
Помимо ответа на эти вопросы я одобрю и швыряние в меня конкретными мануалами, которые дали бы мне возможность найти ответы.

Ответов: 2

1
12 сен 2017 20:41
Не уверен, что еще актуально. Но если именно через код решение необходимо, то что то в таком духе будет:
public class issue52326 {
    public static void main(String[] args) throws InterruptedException, IOException {
        Path startingDir = Paths.get("E:\\MyProjects\\javaTalks");
        String lookedString = "patternForMatch";
        List<Path> paths = new ArrayList<>();
        Files.walkFileTree(startingDir, new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
                if (!attrs.isDirectory())
                    if (attrs.isRegularFile() && Files.lines(dir).anyMatch((s) -> s.contains(lookedString)))
                        paths.add(dir);
                return CONTINUE;
            }
        });
        paths.forEach(System.out::println);
    }
}


Не тестил, если честно.
По мне так легче действительно через ком строку. Можно же просто бат файл накидать и запускать. В линуксе и того проще.
1
06 сен 2017 06:30
Приветствую!
В принципе тут и писать ничего не надо. Нужно воспользоваться командами операционной системы.
find . -name "name*" | grep "searchpattern"
Модераторы: Нет
Сейчас эту тему просматривают: Нет