我已经看到了如何在Java中返回文件夹的大小:Get size of folder or file,但是在Kotlin中找不到它。
如何获取Kotlin中文件夹的大小?
答案 0 :(得分:3)
要递归获取目录及其子目录中文件的总大小,可以使用.walkTopDown()
函数来构建一个枚举所有文件的序列,然后对.length
s求和的文件元素。
val directory: File = ...
val totalSize =
directory.walkTopDown().filter { it.isFile }.map { it.length() }.sum()
这里需要使用.isFile
来过滤元素,因为未指定.length
在表示目录的File
上调用时返回什么。
答案 1 :(得分:0)
这就是操作方法:
private fun dirSize(dir: File): Long {
if (dir.exists()) {
var result: Long = 0
val fileList = dir.listFiles()
for (i in fileList!!.indices) {
if (fileList[i].isDirectory) {
result += dirSize(fileList[i])
} else {
result += fileList[i].length()
}
}
return result
}
return 0
}
如果您想要一个可读的字符串,可以这样做:
private fun getStringSize(size: Long): String {
if (size <= 0)
return "0MB"
val units = arrayOf("B", "KB", "MB", "GB", "TB")
val digitGroups = (Math.log10(size.toDouble()) / Math.log10(1024.0)).toInt()
return DecimalFormat("#,##0.#").format(size / Math.pow(1024.0, digitGroups.toDouble())) + " " + units[digitGroups]
}
如何使用它:
val directory = File(filesDir.absolutePath + File.separator + DIRECTORY_NAME)
println(getStringSize(dirSize(directory)))
希望对您有些帮助。