Contenido del curso
Pensando en objetos
Construcción de clases y modelado de objetos
- 10

Métodos estáticos para clases utilitarias en Java
08:43 min - 11

Constantes en Java: inmutabilidad con static final
04:08 min - 12

Constructores en Java para objetos con datos
08:10 min - 13

Gestión de memoria en Java: stack, heap y garbage collector
07:04 min - 14

Encapsulamiento en Java: Atributos privados y métodos getter y setter
09:26 min - 15

Listas en Java: agregar, recorrer y eliminar
11:12 min - 16

Asociación, agregación y composición en Java
03:45 min - 17

Menú interactivo en Java con switch
11:37 min - 18

Buscar y eliminar películas en Java
09:20 min
Estructuras de datos y Java moderno
- 19

Streams y lambdas para filtrar listas en Java
11:55 min - 20

Ordenar y transformar listas con streams en Java
11:49 min - 21

Validación de entrada con enums en Java
11:56 min - 22

Excepciones personalizadas en Java
08:16 min - 23

Records para simplificar código inmutable en Java
06:59 min - 24

Mapas en Java para contar visualizaciones de películas
09:47 min - 25

Leer archivos planos con Java nio
13:48 min - 26

Escribir en archivos planos con Files.writeString
Viendo ahora
Reutilización y diseño orientado a objetos
Escribir en archivos planos con Files.writeString
Resumen
Escribir en archivos planos con Java es la otra mitad imprescindible del manejo de datos persistentes. Si ya sabes leer con la API moderna java.nio.file, ahora toca guardar información de forma permanente usando Files.writeString, StandardOpenOption y un truco elegante con String.join para convertir objetos en líneas listas para almacenar.
¿Cómo convertir un objeto en una línea de texto con String.join?
Antes de guardar una película en el archivo, necesitas transformar ese objeto en una cadena con separadores. La forma larga sería concatenar cada atributo con +, pero queda ilegible.
La alternativa limpia es usar String.join, un método de la clase String que recibe el separador y los elementos a unir. Así arma la línea con cada propiedad de la película:
contenido.getTitulo()para el título.String.valueOf(contenido.getDuracion())porque la duración es un entero y necesita convertirse a texto.contenido.getGenero().name()para obtener el nombre del género.String.valueOf(contenido.getCalificacion())para castear la calificación numérica.contenido.getFechaEstreno().toString()para transformar la fecha en texto.
Todos los elementos van separados por coma, igual que las líneas existentes en el archivo. Este formato mantiene consistencia con los datos que ya estabas leyendo.
¿Para qué sirve String.join en Java? Une varios textos usando un separador definido. En vez de concatenar con
+, lo escribes una sola vez y el código queda más limpio y legible.
¿Cómo escribir contenido en un archivo plano con Files.writeString?
Dentro de la clase FileUtils creas un método llamado escribirContenido que recibe la película y no retorna nada. Después de armar la línea, llamas a Files.writeString desde java.nio.file, que recibe tres parámetros clave.
El primero es el path, generado con Paths.get("nombreDelArchivo"). El segundo es la línea concatenada con System.lineSeparator(), que añade un salto de línea automático y compatible con cualquier sistema operativo. El tercero son las opciones de apertura del archivo.
¿Qué hacen StandardOpenOption.CREATE y APPEND?
Aquí entran dos opciones que cambian completamente el comportamiento de la escritura.
- StandardOpenOption.CREATE: si el archivo no existe, lo crea automáticamente.
- StandardOpenOption.APPEND: añade el contenido al final del archivo en lugar de reemplazarlo.
Sin APPEND, cada nueva escritura borraría todo lo anterior. Con esta combinación, tu archivo crece de forma incremental, manteniendo el historial completo.
¿Qué hace System.lineSeparator? Devuelve el salto de línea correcto según el sistema operativo:
\nen Unix y\r\nen Windows. Garantiza que cada registro nuevo quede en su propia línea.
¿Por qué necesitas un bloque try-catch al escribir archivos?
La operación de escritura puede fallar por permisos, rutas inválidas o problemas del disco, así que Java te obliga a manejar la excepción.
Envuelves la llamada a Files.writeString dentro de un bloque try y capturas el error en el catch, mostrando un mensaje como "Error escribiendo al archivo" junto al detalle de la excepción. Sin este control, el código ni siquiera compila.
Luego, en la clase Plataforma, después de validar que la película no exista, llamas a FileUtils.escribirContenido(elemento) para que la nueva entrada quede registrada.
¿Por qué la última línea del archivo debe quedar vacía?
Al probar la aplicación con una película como Harry Potter, género ciencia ficción, duración 203 y calificación 4.8, puede que la nueva línea aparezca pegada a la anterior. Eso ocurre cuando el archivo no termina con un salto de línea.
La solución es asegurarte de que la última línea del archivo siempre esté vacía antes de ejecutar la escritura. Así, System.lineSeparator() hace su trabajo correctamente y cada registro nuevo queda en su propia fila, dejando otra línea vacía lista para la siguiente.
Después de refrescar el archivo con reload from disk, verás que Harry Potter aparece bien formateado y con espacio para futuras películas.
¿Para qué sirve el manejo de archivos en aplicaciones reales?
Dominar la lectura y escritura de archivos planos en Java te abre la puerta a tareas que aparecen en cualquier proyecto serio.
- Importar datos desde fuentes externas como CSV o TXT.
- Exportar reportes y resultados procesados.
- Generar backups automáticos de información crítica.
- Sincronizar datos entre aplicaciones distintas.
La información ya no es temporal: queda guardada de forma persistente, lista para recuperarse en la próxima ejecución. Y lo mejor es que esta habilidad se traduce a casi cualquier lenguaje de programación.
¿Ya probaste agregar varias películas seguidas a tu archivo? Cuéntame en los comentarios qué resultado te dio y qué otros casos de uso se te ocurren para Files.writeString.