Trabajo con el sistema de archivos en Swift: 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

Introducción

\n

Trabajar con el sistema de archivos es una de las tareas clave al desarrollar aplicaciones para iOS y macOS. Independientemente de si estás escribiendo una aplicación para guardar datos de usuario, almacenar en caché imágenes o exportar documentos, comprender los fundamentos del trabajo con archivos en Swift es una habilidad obligatoria. En este artículo, analizaremos ejemplos prácticos de trabajo con el sistema de archivos: creación, lectura, escritura, eliminación de archivos y gestión de directorios.

\n

Apple proporciona una potente API FileManager que permite interactuar con el sistema de archivos tanto en iOS como en macOS. La veremos con ejemplos reales y código listo para usar.

\n\n

1. Obtención de rutas a directorios del sistema

\n

Antes de comenzar a trabajar con archivos, necesitas acceder a los directorios correctos. En iOS y macOS, cada aplicación funciona en una zona aislada (sandbox). Para almacenar datos, utiliza las siguientes rutas:

\n\n

Directorio Documents

\n

Se utiliza para almacenar datos del usuario que deben conservarse durante las actualizaciones de la aplicación y las copias de seguridad.

\n
import Foundation\n\nfunc getDocumentsDirectory() -> URL {\n    let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)\n    return paths[0]\n}\n\n// Ejemplo de uso\nlet documentsURL = getDocumentsDirectory()\nprint("Ruta de Documents: \\(documentsURL.path)")
\n\n

Directorio Caches

\n

Para archivos temporales que se pueden recrear (por ejemplo, caché de imágenes).

\n
func getCachesDirectory() -> URL {\n    let paths = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)\n    return paths[0]\n}
\n\n

Directorio Library/Application Support

\n

Para almacenar datos que no deben ser accesibles directamente por el usuario, pero que deben conservarse.

\n
func getApplicationSupportDirectory() -> URL {\n    let paths = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask)\n    let directory = paths[0]\n    // Asegurémonos de que el directorio existe\n    try? FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true)\n    return directory\n}
\n\n

2. Creación y escritura de archivos

\n

Ahora que sabemos dónde almacenar archivos, aprendamos a crearlos y escribir datos.

\n\n

Escritura de datos de texto

\n

La forma más sencilla es usar el método write(to:) de un String o Data.

\n
func writeTextFile() {\n    let fileName = "example.txt"\n    let documentsURL = getDocumentsDirectory()\n    let fileURL = documentsURL.appendingPathComponent(fileName)\n    \n    let content = "¡Hola, Swift! Este es un archivo de prueba."\n    \n    do {\n        try content.write(to: fileURL, atomically: true, encoding: .utf8)\n        print("Archivo creado exitosamente: \\(fileURL.path)")\n    } catch {\n        print("Error al escribir el archivo: \\(error.localizedDescription)")\n    }\n}
\n\n

Escritura de datos binarios (imágenes, JSON)

\n

Para trabajar con datos binarios, usamos Data.

\n
func writeJSONFile() {\n    let fileName = "data.json"\n    let documentsURL = getDocumentsDirectory()\n    let fileURL = documentsURL.appendingPathComponent(fileName)\n    \n    let dictionary: [String: Any] = [\n        "name": "Desarrollador Swift",\n        "age": 30,\n        "skills": ["iOS", "macOS", "SwiftUI"]\n    ]\n    \n    do {\n        let jsonData = try JSONSerialization.data(withJSONObject: dictionary, options: .prettyPrinted)\n        try jsonData.write(to: fileURL, options: .atomic)\n        print("Archivo JSON guardado")\n    } catch {\n        print("Error: \\(error)")\n    }\n}
\n\n

Creación de directorios

\n

A veces es necesario crear carpetas anidadas para organizar los archivos.

\n
func createSubdirectories() {\n    let documentsURL = getDocumentsDirectory()\n    let subDirURL = documentsURL.appendingPathCo                

Blogs

Book Recommendations