[kotlin] 파일을 압축하여 다른 파일로 이동하는 방법

이번에는 Kotlin에서 파일을 압축하고 다른 파일로 이동하는 방법에 대해 알아보겠습니다.

1. java.util.zip 패키지 사용하기

Kotlin에서 파일을 압축하고 이동하기 위해 java.util.zip 패키지의 ZipOutputStreamFileInputStream 클래스를 사용할 수 있습니다.

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

fun compressAndMoveFile(sourceFilePath: String, destinationFilePath: String) {
    val outputFile = File(destinationFilePath)
    val sourceFile = File(sourceFilePath)

    // 압축 대상 파일을 읽어서 ZipEntry로 변환하여 압축 파일에 추가
    ZipOutputStream(FileOutputStream(outputFile)).use { zipOutputStream ->
        val zipEntry = ZipEntry(sourceFile.name)
        FileInputStream(sourceFile).use { fileInputStream ->
            zipOutputStream.putNextEntry(zipEntry)
            fileInputStream.copyTo(zipOutputStream)

            // 압축을 마치고 해당 파일을 제거
            zipOutputStream.closeEntry()
            sourceFile.delete()
        }
    }
}

fun main() {
    val sourceFilePath = "path/to/source/file.txt"
    val destinationFilePath = "path/to/destination/archive.zip"

    compressAndMoveFile(sourceFilePath, destinationFilePath)
}

위의 예제 코드는 compressAndMoveFile 함수를 통해 주어진 소스 파일 경로의 파일을 압축하여 목적지 파일 경로로 이동하는 예입니다. 해당 예제 코드를 실행하면 소스 파일은 압축된 후 이동됩니다.

2. kotlinx.coroutines 패키지 사용하기

Kotlin의 kotlinx.coroutines 패키지를 사용하여 비동기적으로 파일을 압축하고 이동할 수도 있습니다.

import java.util.zip.ZipEntry
import java.util.zip.ZipOutputStream
import java.io.File
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking

fun compressAndMoveFile(sourceFilePath: String, destinationFilePath: String) = runBlocking {
    withContext(Dispatchers.IO) {
        val outputFile = File(destinationFilePath)
        val sourceFile = File(sourceFilePath)

        // 압축 대상 파일을 읽어서 ZipEntry로 변환하여 압축 파일에 추가
        ZipOutputStream(FileOutputStream(outputFile)).use { zipOutputStream ->
            val zipEntry = ZipEntry(sourceFile.name)
            FileInputStream(sourceFile).use { fileInputStream ->
                zipOutputStream.putNextEntry(zipEntry)
                fileInputStream.copyTo(zipOutputStream)

                // 압축을 마치고 해당 파일을 제거
                zipOutputStream.closeEntry()
                sourceFile.delete()
            }
        }
    }
}

fun main() = runBlocking {
    val sourceFilePath = "path/to/source/file.txt"
    val destinationFilePath = "path/to/destination/archive.zip"

    launch {
        compressAndMoveFile(sourceFilePath, destinationFilePath)
    }

    // 압축 및 이동 작업이 완료될 때까지 기다림
    println("압축 및 이동 작업을 기다리는 중...")
}

위의 예제 코드는 코루틴을 사용하여 비동기적으로 파일을 압축하고 이동하는 예입니다. compressAndMoveFile 함수가 비동기로 실행되며, main 함수에서 해당 작업이 완료될 때까지 기다리도록 합니다.


위의 소스 코드 예제는 Kotlin에서 파일을 압축하여 다른 파일로 이동하는 방법에 대해 알아보았습니다. java.util.zip 패키지를 사용하거나 kotlinx.coroutines 패키지를 사용하여 비동기적으로 파일을 처리할 수 있습니다.