为什么使用空间计算,对于目录,使用java和'du -sk'是不同的?,'du -sk'的确切java替代方法是什么?

时间:2016-08-09 09:39:09

标签: java file-io nio du diskusage

为什么使用空间计算,对于目录,使用java和'du -sk'是不同的?,'du -sk'的确切java替代方法是什么?

PFB Java代码,

    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;
}

Out put,

使用过的空间[du -sk]

83164000 / home / bhlabhla

used space [Recursion]:83151664

used space [Java 8]:83153560

1 个答案:

答案 0 :(得分:0)

差异是因为du将始终打印实际磁盘使用情况,而其中存储的信息可能更大或更小。

稀疏文件(您可以查找它们)可能会在很小的磁盘存储空间中存储一个看起来很大的文件。

硬链接(您可以查找它们)可以在其中一个位置存储多个文件。

块大小(您可以查找它们)可能会在每个文件的末尾浪费一些字节,因此文件需要的存储量超出了其容量。