2

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

 1 year ago
source link: http://i.lckiss.com/?p=8242
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

背景&需求

一个无层级的极简压缩,主要是用于应用的数据库以及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 的文件流语法糖,不支持层级是因为没有去支持,自己改改也可以的,就是一个层级嵌套问题,网上的库有点大材小用了,这个小巧好用。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK