Ejemplo guiado: empresas en ficheros

Actividad formativa para Acceso a Ficheros. Reproduce el ejemplo, interpreta sus comprobaciones y después modifica una pequeña parte. La aplicación entregable se describe en Fase 1 (UD1): persistencia en ficheros.

Preparar y ejecutar

  1. Prepara Git y GitHub y Codespaces como entorno de desarrollo, o usa un entorno local con Python 3.10 o posterior.

  2. Abre el laboratorio de empresas en el repositorio público de ejemplos. Para experimentar y guardar cambios, clona o abre Codespaces desde tu fork de ad-ejemplos.

  3. Ejecuta desde la raíz de ese repositorio:

    python3 ud01-ficheros/python/ficheros_fct.py --salida datos-demo
    

El programa utiliza solo biblioteca estándar. Genera JSON, CSV y XML con datos ficticios y sobrescribe sus propios archivos de demostración al repetirlo. La guía técnica reúne sus comandos y pruebas. Los enlaces con TU_USUARIO son provisionales. Este laboratorio no se entrega; la aplicación del alumno se desarrolla en el maestro privado de Caso práctico: gestión de FCT.

Resultado esperado

JSON: relectura correcta con un componente nuevo
XML: estructura, tutores y caracteres conservados
CSV: nombres conservados; tutores omitidos por la proyección
Error controlado: Identificador de empresa duplicado
Error controlado: Fallo simulado antes del reemplazo
Fichero previo y notificaciones correctos tras ambos fallos
Colección vacía: comprobación correcta

No basta ver el mensaje: abre los archivos de datos-demo y contrasta su contenido con los datos en memoria y con las comprobaciones del código.

Recorrido guiado

Qué observar

Pieza

Responsabilidad

Comprobación

validar

Esquema, campos obligatorios e identificadores únicos

Un duplicado se rechaza antes de guardar

RepositorioEmpresas

Guardar y recuperar una colección bajo un contrato acotado

Un componente nuevo recupera los mismos valores desde disco

escribir_seguro

Temporal junto al destino y reemplazo al terminar

El fallo previo al reemplazo conserva los bytes del fichero válido

exportar_csv

Proyección de ID y nombre

Comillas y punto y coma del nombre se conservan al releer

exportar_xml / importar_xml

Conversión entre árbol documental y datos en memoria

Identificadores, nombres y tutores se conservan en la ida y vuelta

Notificación

Aviso después del guardado correcto

Los intentos rechazados no generan avisos de éxito

El modelo intermedio es la lista de empresas. XML y JSON conservan los campos de ese modelo; el CSV es deliberadamente un resumen y no una copia completa. El lector XML admite el esquema de este ejemplo, no cualquier documento XML. El reemplazo protege un fichero ante los fallos mostrados; no constituye una transacción entre JSON, CSV y XML ni promete recuperación ante cualquier caída.

Cambios para probar

  1. Añade una empresa con nombre que contenga una coma y dos tutores. Predice el contenido de los tres archivos y vuelve a ejecutar.

  2. Duplica un ID de tutor. Localiza el punto de rechazo y comprueba que no se emite una notificación de éxito.

  3. En una copia del JSON generado, elimina un campo obligatorio. Recupera esa copia con el componente y distingue error de sintaxis de error de datos.

  4. Cambia la proyección CSV para incluir el número de tutores. ¿Podrías reconstruir sus nombres a partir de ese número?

  5. Redacta el contrato de guardar y recuperar: entradas, resultados, errores, efecto sobre un fichero inexistente y comportamiento con [].

Solución razonada
  1. JSON y XML incluirán los tutores; CSV solo el ID y el nombre de empresa. El escritor CSV entrecomilla según su delimitador y escapa las comillas.

  2. Falla validar; no se llega al reemplazo ni al aviso posterior.

  3. Un JSON con un campo omitido puede seguir siendo sintácticamente correcto; falla la validación del esquema acotado. Un JSON truncado falla al parsear.

  4. El número es una proyección irreversible: no conserva nombres ni IDs de tutores.

  5. guardar([]) inicia una colección vacía. Recuperar un fichero inexistente propaga el error de acceso; no lo transforma en una colección vacía.

Trasladar la idea a Java

Mantén el contrato y las comprobaciones: biblioteca JSON para serializar, parser/escritor CSV y parser XML. Evita implementar analizadores propios. El lenguaje cambia las llamadas, no el orden validar → escribir temporal → reemplazar → notificar. Añade estudiantes y asignaciones gradualmente para completar la fase de FCT, reutilizando lo ya trabajado.

Los ejemplos Java pequeños están en UD1. El esqueleto Java de la aplicación y la solución completa se consultan en la práctica transversal, con pruebas comunes para contrastar trabajo y referencia. Su rúbrica permanece en los apuntes.

Documentación para consultar