Как вернуть кол-во файлов и папок?

Всем привет!) Мне необходимо вернуть количество папок по указанному пути . Но почему-то метод amountOfUsers = Files.walk(pathToRootFolder, 1).filter(Files::isDirectory).count(); первым элементом возвращает мне и саму директорию в которой я считываю кол-во папок . Как это исправить?

И вопрос номер 2 . Я так же должен считать файлы из папки и вернуть их имена , но при считывании мне возвращает еще и файл .DS_Store (он походу создается автоматом когда создается папка). Есть ли возможность кинуть в игнор допустим это имя файла? Использовал такой вот код:

pathStream.filter(Files::isRegularFile).forEach(System.out::println);

Ответы (1 шт):

Автор решения: ulxanxv

Пользовались когда-нибудь Git? Если пользовались, то наверняка знаете, что там есть файл .gitignore, в который можно записывать в строчку файлы/папки, которые следует игнорировать в формате Regex.

Сделайте также.

Файл .ignore

^.+Task repository$
^.DS_Store$

Метод для считывания файла c игнорируемым объектами

public List<Pattern> getIgnored() throws IOException {
    return Files.lines(Paths.get("./.ignore"))
            .map(Pattern::compile)
            .collect(Collectors.toList());
}

Метод проверки имени директории/файла на наличие в списке игнорирования

public boolean checkIgnore(String checkedOb) throws IOException {
    for (Pattern ignoredPattern : getIgnored()) {
        if (ignoredPattern.matcher(checkedOb).find()) {
            return false;
        }
    }

    return true;
}

Далее, в методе .filter() теперь указывайте условие не только Files.isDirectory(), а ещё и checkIgnore()

P.S. Естественно данный код можно рефакторить. Например, убрать считывание файла с игнорируемыми объектами при каждом обращении к методу checkIgnore(). Я просто дал Вам идею.

→ Ссылка