in ruler-common/src/main/java/com/spotify/ruler/common/apk/ApkCreator.kt [134:175]
fun unzipFile(zipFile: File, destDirectory: Path) {
val logger = Logger.getLogger("Ruler")
val buffer = ByteArray(BUFFER_SIZE)
// Create a temporary directory
Files.createDirectories(destDirectory)
// Create ZipInputStream to read the zip file
val zipInputStream = ZipInputStream(FileInputStream(zipFile))
// Loop through each entry in the zip file
var zipEntry = zipInputStream.nextEntry
while (zipEntry != null) {
val newFile = destDirectory.resolve(zipEntry.name)
logger.log(Level.INFO, "extracting $zipEntry to $newFile")
// Create necessary directories if they don't exist
if (zipEntry.isDirectory) {
Files.createDirectories(newFile)
} else {
newFile.toFile().parentFile.mkdirs()
// Create FileOutputStream to write the file
FileOutputStream(newFile.toFile()).use { fos ->
// Read and write the data
var len = zipInputStream.read(buffer)
while (len > 0) {
fos.write(buffer, 0, len)
len = zipInputStream.read(buffer)
}
}
}
// Move to the next entry in the zip file
zipEntry = zipInputStream.nextEntry
}
// Close the ZipInputStream
zipInputStream.closeEntry()
zipInputStream.close()
println("File successfully unzipped to $destDirectory")
}