파일 압축 해보자

파일 압축의 경우 Blocking 로직이 수반되기 때문에, 조심하자

import java.io.*
import java.util.zip.*

/**
 * @author Taejun Park
 */
object ZipMakerUtils {
    private fun File.bufferedOutputStream(size: Int = 8192) = BufferedOutputStream(this.outputStream(), size)
    private fun File.zipOutputStream(size: Int = 8192) = ZipOutputStream(this.bufferedOutputStream(size))
    private fun File.bufferedInputStream(size: Int = 8192) = BufferedInputStream(this.inputStream(), size)
    private fun File.asZipEntry() = ZipEntry(this.name)

    // 지정된 파일 압축
    fun archiveZip(files: List<File>, destination: File) =
        destination.zipOutputStream().use {
            files.forEach { file ->
                it.putNextEntry(file.asZipEntry())
                file.bufferedInputStream().use { bis -> bis.copyTo(it) }
            }
        }
}

Last updated