Escribir un Inputstream grande para archivar en Kotlin

Recibo una gran cantidad de text del service web REST y me gustaría escribirlo directamente en el file. ¿Cuál es la forma más simple de hacer esto?

He escrito la siguiente extensión de function que FUNCIONA. Pero no puedo dejar de pensar que hay una forma más limpia de hacerlo.

Nota : Esperaba usar try with resources para cerrar automáticamente la secuencia y el file

fun File.copyInputStreamToFile(inputStream: InputStream) { val buffer = ByteArray(1024) inputStream.use { input -> this.outputStream().use { fileOut -> while (true) { val length = input.read(buffer) if (length <= 0) break fileOut.write(buffer, 0, length) } fileOut.flush() } } } 

Puede simplificar su function utilizando la function copyTo :

 fun File.copyInputStreamToFile(inputStream: InputStream) { inputStream.use { input -> this.outputStream().use { fileOut -> input.copyTo(fileOut) } } } 

Sugiero hacer esto:

 fun InputStream.toFile(path: String) { use { input -> File(path).outputStream().use { input.copyTo(it) } } } 

y luego usar como:

 InputStream.toFile("/some_path_to_file") 

Mi proposition es:

 fun InputStream.toFile(path: String) { File(path).outputStream().use { this.copyTo(it) } } 

sin cerrar la stream actual

 InputStream.toFile("/path/filename") 

Además, no se olvide de manejar excepciones, por ejemplo, si se deniega el permiso de escritura 🙂

Tienes que hacer esto

 @Throws fun copyDataBase() { var myInput = context.getAssets().open(DB_NAME) var outFileName = DB_PATH + DB_NAME var fileOut: OutputStream = FileOutputStream(outFileName) val buffer: ByteArray = ByteArray(1024) var length: Int? = 0 while (true) { length = myInput.read(buffer) if (length <= 0) break fileOut.write(buffer, 0, length) } fileOut.flush() fileOut.close() myInput.close() throw IOException() } 
  • Kotlin renombrando Getters Generados y Setters
  • Kotlin: Pasar la implementación de una interfaz como parámetro
  • Cómo evitar los files de kotlin con Findbugs
  • Val no puede ser reasignado error de compilation de time para variable local en diversión en kotlin
  • Coincidencia de patrones en tuplas en Kotlin
  • No se puede get dokka para generar documentos de kotlin en el proyecto gradle / android
  • Este campo filtra un object de context
  • Fábrica configurable en Kotlin para JavaScript
  • ¿Cómo establecer la pestaña BottomNavigationView pnetworkingeterminada en Kotlin?
  • BDD en Android con Kotlin
  • ¿Cómo dejar que un bloque kotlin vuelva a estar vacío?