Прошу подсказать. Решаю через
Path walkFileTree(Path start, FileVisitor<!--? super Path--> visitor)
в параметрах метода создаю анонимный класс
new SimpleFileVisitor<>() {
Анонимный класс может читать поля основного класса только final или которые не будут меняться.
В данном случае реально замутить счетчик файлов, папок и размера с использованием анонимного класса или необходимо создавать еще класс наследованный от SimpleFileVisitor и уже его юзать?
В данном коде на строку 53 ругается idea: Variable 'directorios' is accessed from within inner class, needs to be final or effectively finalpackage com.javarush.task.task31.task3113;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
Что внутри папки?
*/
public class Solution {
//C:\Users\mdv106u\YandexDisk\Programming\Java\JavaRushTasks\4.JavaCollections\src\com\javarush\task\task31\task3113
public static void main(String[] args) throws IOException {
Path directorySearch;
int directorios = 0;
int files = 0;
int bytes = 0;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String directoryName = reader.readLine();
Pattern pattern = Pattern.compile("\\w:\\\\.*\\\\[\\wА-Яа-я]+$");
Matcher matcher = pattern.matcher(directoryName);
if (matcher.find()) {
directorySearch = Paths.get(matcher.group());
} else {
System.out.println(matcher.group() + " - не папка");
return;
}
Files.walkFileTree(directorySearch, new SimpleFileVisitor<>() {
//Необхадимо указывать с дженериком
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
return super.visitFile(file, attrs);
}
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
directorios++;
return super.preVisitDirectory(dir, attrs);
}
});
}
}