Kotlin 解压缩

    fun unZipFile(zipFile: String, targetFile: String) {
        var outputStream: OutputStream? = null
        var inputStream: InputStream? = null
        try {
            File(targetFile).run {
                if (!exists()) {
                    mkdirs()
                }
            }
            val zf = ZipFile(zipFile)
            val entries = zf.entries()
            while (entries.hasMoreElements()) {
                val zipEntry: ZipEntry = entries.nextElement()
                val zipEntryName = zipEntry.name
                inputStream = zf.getInputStream(zipEntry)
                if (zipEntryName.startsWith("__MACOSX")) {
                    continue
                }
                File(targetFile, zipEntryName).apply {
                    if (isDirectory) {
                        if (!exists()) {
                            mkdirs()
                        }
                    } else {
                        createNewFile()
                        writeStreamToFile(inputStream, this)
                    }
                }
                inputStream?.close()
                outputStream?.close()
            }
            File(zipFile).delete()
        } finally {
            inputStream?.close()
            outputStream?.close()
        }
    }


    private fun writeStreamToFile(stream: InputStream, file: File) {
        try {
            val fos = FileOutputStream(file)

            val buffer = ByteArray(1024)
            var len: Int
            var total = 0
            while ((stream.read(buffer).also { len = it }) != -1) {
                fos.write(buffer, 0, len)
                total += len
            }

            fos.flush()
            fos.close()
            stream.close()
        } catch (e1: Exception) {
            e1.printStackTrace()
        }
    }


    fun getMapRootPath(context: Context): String {
        return if (Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) {
            context.filesDir.absolutePath + "filename"
        } else {
            context.getExternalFilesDir("filename")?.absolutePath
                ?: context.cacheDir.absolutePath
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值