抬头仰望星空,是否能发现自己的渺小。

伪斜杠青年

人们总是混淆了欲望和理想

Android 使用 ZipFile 压缩/解压 zip 文件

背景&需求

一个无层级的极简压缩,主要是用于应用的数据库以及SP导入导出使用,不希望引入三方插件库。

实现

object ZipManager {

    fun zip(files: Array<File>, zipFile: File) {
        ZipOutputStream(zipFile.outputStream()).use { output ->
            files.forEach { file ->
                file.inputStream().use { input ->
                    val entry = ZipEntry(file.name)
                    output.putNextEntry(entry)
                    input.copyTo(output)
                }
            }
        }
    }

    fun unzip(zipFile: File): String {
        val parentFile = zipFile.parentFile ?: return ""
        val outDir = "${parentFile.absolutePath}/${zipFile.nameWithoutExtension}/"
        File(outDir).apply {
            mkdirs()
        }
        ZipFile(zipFile).use { zip ->
            zip.entries().asSequence().forEach { entry ->
                zip.getInputStream(entry).use { input ->
                    val file = File(outDir + entry.name)
                    file.outputStream().use {
                        input.copyTo(it)
                    }
                }
            }
        }
        return outDir
    }
}

其他

应该比较好理解,用了一些 kotlin 的文件流语法糖,不支持层级是因为没有去支持,自己改改也可以的,就是一个层级嵌套问题,网上的库有点大材小用了,这个小巧好用。

以上!


本站由以下主机服务商提供服务支持:

0条评论

发表评论