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¶
Prepara Git y GitHub y Codespaces como entorno de desarrollo, o usa un entorno local con Python 3.10 o posterior.
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.
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¶
Pieza |
Responsabilidad |
Comprobación |
|---|---|---|
|
Esquema, campos obligatorios e identificadores únicos |
Un duplicado se rechaza antes de guardar |
|
Guardar y recuperar una colección bajo un contrato acotado |
Un componente nuevo recupera los mismos valores desde disco |
|
Temporal junto al destino y reemplazo al terminar |
El fallo previo al reemplazo conserva los bytes del fichero válido |
|
Proyección de ID y nombre |
Comillas y punto y coma del nombre se conservan al releer |
|
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¶
Añade una empresa con nombre que contenga una coma y dos tutores. Predice el contenido de los tres archivos y vuelve a ejecutar.
Duplica un ID de tutor. Localiza el punto de rechazo y comprueba que no se emite una notificación de éxito.
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.
Cambia la proyección CSV para incluir el número de tutores. ¿Podrías reconstruir sus nombres a partir de ese número?
Redacta el contrato de
guardaryrecuperar: entradas, resultados, errores, efecto sobre un fichero inexistente y comportamiento con[].
Solución razonada
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.
Falla
validar; no se llega al reemplazo ni al aviso posterior.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.
El número es una proyección irreversible: no conserva nombres ni IDs de tutores.
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¶
Lectura y escritura CSV en Python:
DictReader,DictWritery los ejemplos de delimitadores y comillas.