Как вернуть кол-во файлов и папок?
Всем привет!)
Мне необходимо вернуть количество папок по указанному пути . Но почему-то метод amountOfUsers = Files.walk(pathToRootFolder, 1).filter(Files::isDirectory).count(); первым элементом возвращает мне и саму директорию в которой я считываю кол-во папок . Как это исправить?
И вопрос номер 2 . Я так же должен считать файлы из папки и вернуть их имена , но при считывании мне возвращает еще и файл .DS_Store (он походу создается автоматом когда создается папка). Есть ли возможность кинуть в игнор допустим это имя файла? Использовал такой вот код:
pathStream.filter(Files::isRegularFile).forEach(System.out::println);
Ответы (1 шт):
Пользовались когда-нибудь 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(). Я просто дал Вам идею.
