栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Kotlin 解压缩

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Kotlin 解压缩

    fun unZip(zipFile: String, context: Context) {
        var outputStream: OutputStream? = null
        var inputStream: InputStream? = null
        try {
            val zf = ZipFile(zipFile)
            val entries = zf.entries()
            while (entries.hasMoreElements()) {
                val zipEntry: ZipEntry = entries.nextElement()
                val zipEntryName =   zipEntry.name
                inputStream = zf.getInputStream(zipEntry)
                //拦截macos的压缩文件解压时会生成的__MACOSX开头目录/文件
                if (zipEntryName.startsWith("__MACOSX")) {
                    continue
                }
                if (zipEntry.isDirectory) {
                    val descFolder = if (Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) {
                        File(context.filesDir,zipEntryName)
                    } else {
                        File(context.getExternalFilesDir(""), zipEntryName)
                    }
                    if (!descFolder.exists()) {
                        descFolder.mkdirs()
                    }
                }  else {
                    val descPath = if (Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) {
                        context.filesDir.absolutePath + File.separator + zipEntryName
                    } else {
                        context.getExternalFilesDir("")?.absolutePath + File.separator + zipEntryName
                    }
                    val descFile = File(descPath)
                    descFile.createNewFile()
                    writeStreamToFile(inputStream,descFile)
                }
                inputStream?.close()
                outputStream?.close()
            }
        } 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()
        }
    }

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/271358.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号