Ejercicios UD07: Ficheros y Excepciones
Resultados de Aprendizaje
Este boletín trabaja el siguiente RA del módulo de Programación:
- RA5 — Realiza operaciones de entrada y salida de información utilizando la clase
File,Scanner,PrintStreamy bloquestry-catch-finally/try-with-resources.
Objetivo
Practicar la persistencia de datos en Java, desde la manipulación básica del sistema de archivos hasta la creación de sistemas robustos con gestión de errores profesional.
Ejercicio 1: El Inspector de Rutas (Nivel: Básico)
Objetivo: Familiarizarse con la clase File y la inspección de metadatos.
Crea un programa llamado InspectorRutas que realice lo siguiente:
- Pida al usuario por teclado una ruta (String) a un archivo o carpeta.
- Utilice la clase
Filepara comprobar si esa ruta existe físicamente. - Si existe:
- Muestra si es un Fichero o un Directorio.
- Muestra su Ruta Absoluta.
- Si es un fichero, muestra su tamaño en bytes.
- Si no existe:
- Informa al usuario y pregúntale si desea crear un nuevo archivo vacío con ese nombre.
- Si responde "sí", utiliza
createNewFile()para materializarlo.
Ejercicio 2: El Contador de Palabras (Nivel: Intermedio)
Objetivo: Lectura básica de ficheros con Scanner.
Crea manualmente un archivo de texto llamado quijote.txt y pega en él los primeros párrafos del libro. A continuación, desarrolla un programa que:
- Abra el archivo
quijote.txtmediante un objetoScanner. - Recorra todo el archivo contando cuántas palabras contiene en total (utiliza
sc.hasNext()ysc.next()). - Muestra por pantalla el resultado final: "El archivo contiene X palabras".
- Extra: Modifica el programa para que también cuente cuántas líneas tiene el archivo.
Ejercicio 3: Procesador de Notas Seguro (Nivel: Intermedio)
Objetivo: Uso de excepciones para validar la entrada de datos (InputMismatchException).
Imagina que tienes un archivo notas.txt con el siguiente formato:
8,5 4,0 7,2 9,0 6,5
Crea un programa que lea este archivo y calcule la nota media. Sin embargo, el programa debe ser robusto:
- Si el archivo contiene algo que no sea un número (ej: una letra "A" por error), el programa debe capturar la excepción
InputMismatchExceptionoNoSuchElementException. - En lugar de cerrarse con error, el programa debe saltar ese "token" erróneo, informar al usuario ("Se ha ignorado un dato no válido") y continuar procesando el resto de las notas.
- Muestra la media final de los datos que sí sean válidos.
Ejercicio 4: Agenda Telefónica (Nivel: Avanzado)
Objetivo: Escritura estructurada y persistencia de colecciones.
Crea una clase Contacto con atributos nombre (String), edad (int) y telefono (String). Luego, desarrolla un programa que:
- Cree un
ArrayList<Contacto>y añada varios contactos a la lista. - Implemente un método
guardarAgenda(ArrayList<Contacto> lista, String archivo)que guarde cada contacto en el archivoagenda.txt. Cada contacto debe ocupar tres líneas: nombre, edad y teléfono. - Implemente un método
cargarAgenda(String archivo)que lea el archivo, reconstruya los objetosContactoy los añada a unArrayList. - Muestra el contenido de la agenda por pantalla tras cargarla del archivo para verificar la persistencia.
Ejercicio 5: Registro de Libros (Nivel: Experto)
Objetivo: Sistema completo con Menú, Modo Append y Try-with-resources.
Desarrolla una aplicación para gestionar una biblioteca personal. Implementa la clase Libro con los siguientes atributos: autor, titulo, anyo (int), numPaginas (int) y precio (double). El programa debe mostrar un menú interactivo:
- Añadir Libro: Pide los datos del libro por teclado. Guarda estos datos al final del archivo
biblioteca.txtusandoFileOutputStream(archivo, true)yPrintStream. Asegúrate de guardar cada atributo en una línea distinta. Utiliza obligatoriamente la estructura try-with-resources. - Listar Biblioteca: Lee el archivo
biblioteca.txty muestra todos los libros registrados de forma legible. Si el archivo no existe, captura laFileNotFoundExceptionpara mostrar el mensaje: "La biblioteca está vacía.". - Vaciar Estantería: Borra físicamente el archivo
biblioteca.txtdel disco. - Salir.
Reto extra: Asegúrate de que el flujo de datos se cierre automáticamente en todas las operaciones usando try-with-resources.