[kotlin] 코틀린에서의 압축 해제 변환 함수

압축 파일은 파일들을 하나의 파일로 묶어서 저장하고 전송할 수 있습니다. 압축 파일을 생성하거나 해제하는 작업은 프로그램에서 자주 사용되며, 이를 위해 변환 함수를 사용할 수 있습니다. 이번에는 코틀린에서 압축 해제 변환 함수를 작성하는 방법에 대해 알아보겠습니다.

압축 해제 함수 작성하기

Kotlin에서 압축 파일을 해제하기 위해 java.util.zip 패키지에 있는 ZipInputStream 클래스를 사용할 수 있습니다. 이 클래스는 주어진 압축 파일을 읽고, 압축을 해제하여 개별 파일들을 읽을 수 있도록 해줍니다.

다음은 unzip 함수를 사용하여 압축 파일을 해제하는 예시 코드입니다.

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

fun unzip(zipFile: File, outputDir: File) {
    val buffer = ByteArray(1024)
    val zipInputStream = ZipInputStream(zipFile.inputStream())
    var zipEntry: ZipEntry? = zipInputStream.nextEntry
    
    while (zipEntry != null) {
        val fileName = zipEntry.name
        val newFile = File(outputDir, fileName)
        
        // 디렉토리인 경우 디렉토리 생성 후 계속 진행
        if (zipEntry.isDirectory) {
            newFile.mkdirs()
        } else {
            // 파일인 경우 파일 생성 후 압축 해제 진행
            FileOutputStream(newFile).apply {
                var read = zipInputStream.read(buffer)
                while (read != -1) {
                    write(buffer, 0, read)
                    read = zipInputStream.read(buffer)
                }
                close()
            }
        }
        
        zipEntry = zipInputStream.nextEntry
    }
    
    zipInputStream.closeEntry()
    zipInputStream.close()
}

위의 코드에서 unzip 함수는 zipFileoutputDir라는 두 개의 매개변수를 가지고 있습니다. zipFile은 압축 해제할 파일을 가리키는 File 객체이고, outputDir은 압축 해제된 파일들을 저장할 디렉토리를 가리키는 File 객체입니다.

압축 파일을 읽기 위해 ZipInputStream을 사용하고, zipEntry를 통해 압축 파일 내의 개별 파일 정보에 접근할 수 있습니다. zipEntry.isDirectory를 사용하여 디렉토리인지 파일인지를 확인하고, 해당 디렉토리를 생성하거나 파일을 생성한 후 압축을 해제합니다.

사용 예시

위의 압축 해제 함수를 사용하여 압축 파일을 해제하는 방법을 살펴보겠습니다.

fun main() {
    val zipFile = File("example.zip")
    val outputDir = File("output")
    
    unzip(zipFile, outputDir)
}

위의 코드는 현재 디렉토리에 위치한 example.zip 파일을 output 디렉토리에 압축 해제하는 예시입니다. unzip 함수의 매개변수로 압축 파일과 저장할 디렉토리를 전달하고, 압축 해제가 완료되면 output 디렉토리에 압축 해제된 파일들이 생성됩니다.

결론

Kotlin에서 압축 파일을 해제하기 위해서는 java.util.zip 패키지에 있는 ZipInputStream 클래스를 사용하면 됩니다. 압축 파일을 해제하는 함수를 작성하여 압축 해제 작업을 수행할 수 있으며, 위의 예시 코드를 참고하여 사용할 수 있습니다.