본문 바로가기

코틀린

코틀린(Kotlin) - 초간단 파일 저장 방법!

fun saveFile(inputStream: InputStream, filePath: String) {
    //저장할 파일
    val saveFile = File(filePath)

    saveFile.outputStream().use { fileOutput ->
        inputStream.copyTo(fileOutput)
    }
}

 

기존에 루프(Loop)를 돌면서 버퍼를 읽는 방식 대신, 코틀린에서 지원하는 copyTo() 기능으로 아주 간편하게 바이트를 복사할 수 있고, use() 함수가 I/O resource를 자동으로 관리해주기 때문에, 초간단하게 파일 저장 코드를 구현할 수가 있습니다! 

확장 함수를 이용해서, 더 멋지게 만들기!

코틀린에는 마치 기존 클래스에 구현된 기능인 것처럼 추가적인 함수를 커스텀하여 사용할 수 있는 확장 함수 기능이 있기 때문에, 위의 파일 저장 코드를 확장 함수로 더 멋지게 만들어 보겠습니다!

(저는 기존 'saveFile' 함수명을 확장 함수스럽게 만들기 위해서 'toFile'로 바꿔보았습니다.)

 

/** InputStream 클래스 확장 */
fun InputStream.toFile(filePath: String) {
    File(filePath).outputStream().use { fileOutput ->
        this.copyTo(fileOutput)
    }
}

 

InputStream 클래스를 확장하여, 파일을 저장하는 확장함수를 구현해보았고,

이렇게 구현한 확장함수를 다음과 같이 사용한다면, 아주 유용하고 간편하게 파일 저장 기능을 사용할 수 있습니다!^^

 

/** 서버에서 파일 다운로드하는 예제 */
override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
    if (response.isSuccessful) {
       response.body()?.byteStream().toFile(filePath)
    } 
}