Darryl Pierce
Chrimaeon
Michael Paus
import okio.FileSystem import okio.Path import okio.Path.Companion.toPath import okio.buffer import okio.openZip import okio.use // This code is identical for jvmCommon and iOS. fun FileSystem.unpackZip(zipFile: Path, destDir: Path) { fun Path.createParentDirectories() { this.parent?.let { parent -> createDirectories(parent) } } val zipFileSystem = openZip(zipFile) val paths = zipFileSystem.listRecursively("/".toPath()) .filter { zipFileSystem.metadata(it).isRegularFile } .toList() paths.forEach { zipFilePath -> zipFileSystem.source(zipFilePath).buffer().use { source -> val relativeFilePath = zipFilePath.toString().trimStart('/') val fileToWrite = destDir.resolve(relativeFilePath) fileToWrite.createParentDirectories() sink(fileToWrite).buffer().use { sink -> sink.writeAll(source) } } } }
A modern programming language that makes developers happier.