[kotlin] 코틀린에서 자바 파일 압축 및 압축 해제하기

코틀린에서 자바 파일을 압축하고 압축을 해제하는 것은 자바의 라이브러리를 활용하여 간단하게 수행할 수 있습니다. 여기에서는 java.util.zip 패키지를 사용하여 압축 파일을 만들고 압축을 해제하는 방법을 살펴보겠습니다.

압축 파일 만들기

import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream
import java.util.zip.ZipEntry
import java.util.zip.ZipOutputStream

fun createZipFile(sourceDir: String, outputZipFile: String) {
    val srcFile = File(sourceDir)
    val files = srcFile.walk().filter { it.isFile }.toList()

    FileOutputStream(outputZipFile).use { fos ->
        ZipOutputStream(fos).use { zos ->
            files.forEach { file ->
                val entry = ZipEntry(srcFile.toPath().relativize(file.toPath()).toString())
                zos.putNextEntry(entry)
                FileInputStream(file).use { input ->
                    input.copyTo(zos)
                }
                zos.closeEntry()
            }
        }
    }
}

createZipFile 함수는 지정된 디렉토리의 파일을 압축파일로 만듭니다. sourceDir은 압축할 파일이 있는 디렉토리 경로이고 outputZipFile은 생성될 압축파일의 이름입니다.

압축 해제하기

import java.io.File
import java.util.zip.ZipEntry
import java.util.zip.ZipInputStream

fun extractZipFile(zipFile: String, outputDir: String) {
    val file = File(zipFile)
    val buffer = ByteArray(1024)

    ZipInputStream(file.inputStream()).use { zis ->
        var entry: ZipEntry?
        while (zis.nextEntry.also { entry = it } != null) {
            val newFile = File(outputDir, entry!!.name)
            if (entry!!.isDirectory) {
                newFile.mkdirs()
            } else {
                newFile.parentFile.mkdirs()
                newFile.outputStream().use { fos ->
                    var len: Int
                    while (zis.read(buffer).also { len = it } > 0) {
                        fos.write(buffer, 0, len)
                    }
                }
            }
        }
    }
}

extractZipFile 함수는 압축파일을 지정된 경로에 해제합니다. zipFile은 압축해제할 파일 경로이고, outputDir은 압축을 해제할 디렉토리 경로입니다.

이제 코틀린에서 자바 파일을 압축 및 압축 해제하는 방법에 대해 알아 보았습니다. 만약 이와 관련하여 추가적인 지식이 필요하다면 아래의 자바문서를 참고하세요.