在我的应用程序中,我想找到许多目录的大小,我需要它快速运行。我见过这些方法,其中两个方法不够快,第三个方法只适用于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 Java 7 nio api, which doesn't work in android
还有什么其他快速有效的方法可供使用?
答案 0 :(得分:0)
StatFs
快速估算目录大小。我们尝试使用du -hsc
和Apache FileUtils
,但是对于大型和复杂的目录,两者都太慢了。
然后,我们偶然发现StatFs
,并被表演震撼了。它不那么准确,但是非常快。在我们的情况下,比du
或FileUtils
快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