fun unzipFile()

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")
}