背景&需求
一个无层级的极简压缩,主要是用于应用的数据库以及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 的文件流语法糖,不支持层级是因为没有去支持,自己改改也可以的,就是一个层级嵌套问题,网上的库有点大材小用了,这个小巧好用。
以上!
本站广告由 Google AdSense 提供
0条评论