Java如何计算目录大小?

在此示例中,我们将使用Apache Commons IO库获取或计算目录的总大小。FileUtilsCommons IO提供的课程可以帮助我们实现这一目标。

我们可以使用的第一种方法是FileUtils.sizeOfDirectory(),它递归计算目录的大小。它以File代表目录的对象作为参数并返回long值。如果目录具有安全限制,则此方法返回0。如果目录大小大于,则返回负值Long.MAX_VALUE。

您也可以使用该FileUtils.sizeOfDirectoryAsBigInteger()方法。此方法返回的结果BigInteger与方法名称描述相同。作为第一种方法,0当目录具有安全限制时,该方法也会返回。

上述两种方法均以字节为单位返回目录大小。如果您想要更大的可读性,可以使用该FileUtils.byteCountToDisplaySize()方法,它将字节值转换为1 MB,1 GB之类的值。

package org.nhooo.example.commons.io;

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.math.BigInteger;

public class DirectorySizeSample {
    public static void main(String[] args) {
        // sizeOfDirectory
        File tempDir = new File("/Users/wayan/Temp");
        long size = FileUtils.sizeOfDirectory(tempDir);
        System.out.println("TempDir size = " + size + " bytes");
        System.out.println("TempDir size = " +
                FileUtils.byteCountToDisplaySize(size));

        // sizeOfDirectoryAsBigInteger()
        File dropboxDir = new File("/Users/wayan/Dropbox");
        BigInteger sizeBig = FileUtils.sizeOfDirectoryAsBigInteger(dropboxDir);
        System.out.println("DropboxDir size = " + sizeBig);
        System.out.println("DropboxDir size = " +
                FileUtils.byteCountToDisplaySize(sizeBig));
    }
}

上面的代码片段的结果:

TempDir size = 514239345 bytes
TempDir size = 490 MB
DropboxDir size = 6184
DropboxDir size = 6 KB

Maven依赖

<!-- http://repo1.maven.org/maven2/commons-io/commons-io/2.6/commons-io-2.6.jar -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>