@NoneDisable

Почему общий размер папки равен нулю?

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 байт. Как исправить вывод?
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
mayton2019
@mayton2019 Куратор тега Java
Bigdata Engineer
Надо этот total count учитывать внутри волкера.

@Override
            public FileVisitResult visitFile(Path path, BasicFileAttributes attr) {
                totalFiles.incrementAndGet();
                totalCount.addAndGet(............); // Add file length
                return FileVisitResult.CONTINUE;
            }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы