Darryl Pierce
06/01/2025, 11:33 AMDarryl Pierce
06/01/2025, 11:40 AMChrimaeon
06/01/2025, 2:11 PMMichael Paus
06/01/2025, 4:50 PMDarryl Pierce
06/04/2025, 6:19 PMMichael Paus
06/05/2025, 6:31 AMimport 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)
}
}
}
}