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;
public class Solution {
private static AtomicInteger totalDirectories = new AtomicInteger(-1);
private static AtomicInteger totalFiles = new AtomicInteger(0);
private static AtomicLong totalCount = new AtomicLong();
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Path path = Paths.get(reader.readLine());
if(!Files.isDirectory(path)) {
System.out.println(path.toAbsolutePath() + " - не папка");
return;
}
walk(path);
System.out.println("Всего папок - " + totalDirectories);
System.out.println("Всего файлов - " + totalFiles);
System.out.println("Общий размер - " + totalCount);
}
public static void walk(Path path) throws IOException {
Files.walkFileTree(path, new SimpleFileVisitor<>() {
@Override
public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes attr) {
totalDirectories.incrementAndGet();
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path path, BasicFileAttributes attr) {
totalFiles.incrementAndGet();
return FileVisitResult.CONTINUE;
}
});
totalCount.addAndGet(Files.size(path));
}
}
Вывод в терминале:
Всего папок - 6
Всего файлов - 10
Общий размер - 0
Все данные корректно отображаются за исключением последней строки. При считывании общего количества байт в начальной директории возвращается ноль, хотя при показе свойств папки в Windows атрибут размера равняется 88 байт. Как исправить вывод?