Trabajo con el sistema de archivos en Kotlin: guía práctica

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con el sistema de archivos en Kotlin: de la teoría a la práctica

\n\n

Trabajar con el sistema de archivos es una de las tareas básicas que todo desarrollador enfrenta. En Kotlin, gracias a su estrecha integración con Java y sus propias y convenientes extensiones, la gestión de archivos y directorios se vuelve intuitiva y concisa. En este artículo, analizaremos las operaciones clave: creación, lectura, escritura y eliminación de archivos, así como el trabajo con directorios. Todos los ejemplos están escritos en Kotlin y listos para usar en tus proyectos.

\n\n

Fundamentos: configuración y primeros pasos

\n\n

Kotlin no tiene su propia biblioteca separada para trabajar con el sistema de archivos; utiliza completamente el poder de java.io.File, añadiéndole numerosas funciones de extensión. Esto significa que puedes usar los métodos familiares de Java, pero con una sintaxis más corta y segura.

\n\n
import java.io.File\n\nfun main() {\n    val file = File("example.txt")\n    println(file.exists()) // false, si el archivo no existe\n}
\n\n

La clase principal es java.io.File. Representa una abstracción de la ruta a un archivo o directorio, que no necesariamente existe en el disco.

\n\n

Lectura y escritura de archivos en Kotlin

\n\n

Kotlin ofrece formas elegantes de leer y escribir, que eliminan la necesidad de gestionar manualmente los flujos y cerrar los recursos.

\n\n

Lectura de todo el contenido de un archivo

\n\n

La forma más sencilla es usar la función readText(). Lee todo el archivo en una sola cadena.

\n\n
fun readEntireFile() {\n    val file = File("data.txt")\n    if (file.exists()) {\n        val content: String = file.readText()\n        println(content)\n    } else {\n        println("Archivo no encontrado")\n    }\n}
\n\n

Si el archivo es grande, es mejor leerlo línea por línea:

\n\n
fun readLines() {\n    File("log.txt").useLines { lines ->\n        lines.forEach { line ->\n            println(line)\n        }\n    }\n    // useLines cerrará el flujo automáticamente\n}
\n\n

Escritura en un archivo

\n\n

Para escribir, usa writeText() (sobrescribe el archivo) o appendText() (agrega al final).

\n\n
fun writeToFile() {\n    val file = File("output.txt")\n    file.writeText("¡Hola, Kotlin!\\n")\n    file.appendText("Esta es la segunda línea.")\n    \n    println(file.readText())\n    // Salida:\n    // ¡Hola, Kotlin!\n    // Esta es la segunda línea.\n}
\n\n

Para datos más complejos (por ejemplo, escribir una lista de cadenas), es conveniente usar writeLines():

\n\n
fun writeListOfLines() {\n    val lines = listOf("Línea 1", "Línea 2", "Línea 3")\n    File("list.txt").writeLines(lines)\n}
\n\n

Creación, copia y eliminación de archivos y directorios

\n\n

Gestionar la estructura de archivos es otra tarea común. Veamos las operaciones principales.

\n\n

Creación de archivos y carpetas

\n\n

El método createNewFile() crea un nuevo archivo vacío si aún no existe. Para crear directorios, usa mkdir() (crea solo la última carpeta en la ruta) o mkdirs() (crea todos los directorios padre faltantes).

\n\n
fun createStructure() {\n    val dir = File("my_project/src/main")\n    if (dir.mkdirs()) {\n        println("Directorio creado: ${dir.absolutePath}")\n    }\n    \n    val newFile = File(dir, "config.ini")\n    if (newFile.createNewFile()) {\n        println("Archivo creado: ${newFile.name}")\n    }\n}
\n\n

Copia y movimiento

\n\n

¿Kotlin no tiene una función incorporada copyTo? ¡En realidad sí la tiene! El método copyTo() permite copiar archivos fácilmente, y renameTo() permite renombrarlos o moverlos.

\n\n
fun copyAndMove() {\n    val source = File("source.txt")\n    val destination = File("backup/source_copy.txt")\n    \n    // Copia\n    source.copyTo(destination, overwrite = true)\n    \n    // Mov                

Blogs

Book Recommendations