Kotlin递归获取文件夹的大小

时间:2020-02-20 11:18:36

标签: file kotlin directory size

我已经看到了如何在Java中返回文件夹的大小:Get size of folder or file,但是在Kotlin中找不到它。

如何获取Kotlin中文件夹的大小?

2 个答案:

答案 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)))

希望对您有些帮助。

相关问题