Android,快速有效地查找目录大小的方法?

时间:2018-04-05 18:49:52

标签: android file

在我的应用程序中,我想找到许多目录的大小,我需要它快速运行。我见过这些方法,其中两个方法不够快,第三个方法只适用于Java,而不是Android。

第一:

public static long folderSize(File directory) {
long length = 0;
for (File file : directory.listFiles()) {
    if (file.isFile())
        length += file.length();
    else
        length += folderSize(file);
}
return length;
}

第二

Using Apache FileUtils

第三

Using Java 7 nio api, which doesn't work in android

还有什么其他快速有效的方法可供使用?

2 个答案:

答案 0 :(得分:0)

使用StatFs快速估算目录大小。

我们尝试使用du -hsc和Apache FileUtils,但是对于大型和复杂的目录,两者都太慢了。

然后,我们偶然发现StatFs,并被表演震撼了。它不那么准确,但是非常快。在我们的情况下,比duFileUtils快1000倍。

似乎正在使用文件系统中内置的统计信息来获取估计的目录大小。这是粗略的实现:

// Wicked-quick method of getting an estimated directory size without having to recursively
// go through each directory and sub directory and calculate the size.
//
public static long getDirectorySizeInBytes( File directory ) {
    if ( Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2 ) return 0; // API < 18 does not support `getTotalBytes` or `getAvailableBytes`.

    StatFs statFs = new StatFs( directory.getAbsolutePath() );

    return statFs.getTotalBytes() - statFs.getAvailableBytes();
}

答案 1 :(得分:0)

如果您使用的是 kotlin

val size = File(parentAbsolutePath,directoryName)
                .walkTopDown()
                .map { it.length() }
                .sum() // in bytes