압축 파일은 파일들을 하나의 파일로 묶어서 저장하고 전송할 수 있습니다. 압축 파일을 생성하거나 해제하는 작업은 프로그램에서 자주 사용되며, 이를 위해 변환 함수를 사용할 수 있습니다. 이번에는 코틀린에서 압축 해제 변환 함수를 작성하는 방법에 대해 알아보겠습니다.
압축 해제 함수 작성하기
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
함수는 zipFile
과 outputDir
라는 두 개의 매개변수를 가지고 있습니다. 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
클래스를 사용하면 됩니다. 압축 파일을 해제하는 함수를 작성하여 압축 해제 작업을 수행할 수 있으며, 위의 예시 코드를 참고하여 사용할 수 있습니다.