[kotlin] 코틀린 표준 라이브러리에서 제공하는 파일 압축과 압축 해제 기능

코틀린 표준 라이브러리는 파일을 압축하고 압축을 해제할 수 있는 다양한 기능을 제공합니다. 이를 통해 파일 처리 과정에서 파일을 효율적으로 관리하고 용량을 절약할 수 있습니다. 이번 글에서는 코틀린 표준 라이브러리를 사용하여 파일을 압축하고 압축을 해제하는 방법에 대해 알아보겠습니다.

1. 파일을 압축하는 방법

코틀린에서는 ZipOutputStream을 사용하여 파일을 압축할 수 있습니다. 다음은 코틀린에서 파일을 압축하는 간단한 예제 코드입니다.

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

fun main() {
    val sourceFile = File("source.txt")
    val zipFile = File("compressed.zip")
    
    ZipOutputStream(FileOutputStream(zipFile)).use { zipOut ->
        FileInputStream(sourceFile).use { fileIn ->
            zipOut.putNextEntry(ZipEntry(sourceFile.name))
            fileIn.copyTo(zipOut)
            zipOut.closeEntry()
        }
    }
}

위 코드에서는 ZipOutputStream을 사용하여 source.txt 파일을 compressed.zip 파일로 압축하고 있습니다.

2. 압축 파일을 해제하는 방법

코틀린에서는 ZipInputStream을 사용하여 압축 파일을 해제할 수 있습니다. 다음은 코틀린에서 압축 파일을 해제하는 간단한 예제 코드입니다.

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

fun main() {
    val zipFile = File("compressed.zip")
    val destDir = File("uncompressed")
    destDir.mkdir()
    
    val buffer = ByteArray(1024)
    ZipInputStream(zipFile.inputStream()).use { zipIn ->
        var entry = zipIn.nextEntry
        while (entry != null) {
            val newFile = File(destDir, entry.name)
            if (entry.isDirectory) {
                newFile.mkdirs()
            } else {
                FileOutputStream(newFile).buffered().use { out -> 
                    var len: Int
                    while (zipIn.read(buffer).also { len = it } > 0) {
                        out.write(buffer, 0, len)
                    }
                }
            }
            entry = zipIn.nextEntry
        }
    }
}

위 코드에서는 ZipInputStream을 사용하여 compressed.zip 파일을 uncompressed 디렉토리로 해제하고 있습니다.

코틀린 표준 라이브러리를 사용하여 파일을 압축하고 압축을 해제하는 방법에 대해 간략하게 알아보았습니다. 파일 압축과 해제는 코틀린으로 간단하게 처리할 수 있으며, 표준 라이브러리의 기능을 효과적으로 활용하여 파일 처리를 보다 효율적으로 할 수 있습니다.

관련 자료: