Почему используемое пространство, рассчитанное для каталога, использующего java и du -sk, различается? И какова точная альтернатива java для du -sk?

Почему используемое пространство, рассчитанное для каталога, использующего java и du -sk, различается? И какова точная альтернатива java для du -sk?

PFB Java Code,


    final String location = "/home/bhlabhla";
    final Path path = Paths.get(location);

    final Process process = Runtime.getRuntime().exec("du -sk " + location);
    final BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String line;
    System.out.println("used space [du -sk]");
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }

    System.out.println("***************************");
    // 1
    System.out.println("used space [Recursion]:" + getFolderSize(new File(location)) / 1024);
    // 2
    final long size = Files.walk(path).mapToLong(p -> p.toFile().length()).sum();
    System.out.println("used space [Java 8]:" + size / 1024);



public static long getFolderSize(final File dir) {
    long size = 0;
    for (final File file : dir.listFiles()) {
        if (file.isFile()) {
            size += file.length();
        } else {
            size += getFolderSize(file);
        }
    }
    return size;
}

Выход,

использованное пространство [du -sk]

83164000 / home / bhlabhla


использованное пространство [Рекурсия]:83151664

использованное пространство [Java 8]:83153560

0 ответов

Разница в том, что du всегда печатает реальное использование диска, в то время как информация, хранящаяся в нем, может быть больше или меньше.

Разреженные файлы (вы можете их искать) могут хранить явно большие файлы в небольшом объеме дискового пространства.

Жесткие ссылки (вы можете их искать) могут хранить несколько файлов вместо одного из них.

Размеры блоков (их можно посмотреть) могут тратить несколько байтов в конце каждого файла, и, следовательно, файлам требуется больше памяти, чем они содержат.

Другие вопросы по тегам