Documentos
¿Cómo manipular Documentos con Groovy?
Sección titulada «¿Cómo manipular Documentos con Groovy?»Manipular documentos con Groovy consiste en crear, leer, transformar y guardar archivos mediante las API de la JVM y las extensiones que aporta el lenguaje. Un documento puede ser un archivo de texto, CSV, JSON, XML, PDF u otro formato binario; su estructura determina qué API o biblioteca conviene utilizar.
Para archivos de texto, Groovy amplía java.io.File con métodos concisos como getText, readLines, eachLine, withReader, withWriter y append. Estas extensiones reducen el código necesario, pero mantienen la interoperabilidad con las clases de Java y con bibliotecas de la JVM.
Los formatos estructurados necesitan una representación adecuada. Por ejemplo, XmlSlurper permite leer XML y MarkupBuilder generarlo. Un PDF no es texto plano: para producirlo se emplea normalmente una biblioteca como Apache PDFBox, OpenPDF o iText, según los requisitos y la licencia del proyecto.
Características de Manipular Documentos con Groovy
Sección titulada «Características de Manipular Documentos con Groovy»- API de archivos simplificada. La clase
Filedispone de métodos añadidos por Groovy para leer, recorrer y escribir contenido sin crear manualmente todos los flujos de entrada y salida. - Gestión automática de recursos. Métodos como
withReaderywithWriterreciben una closure, es decir, un bloque de código ejecutable, y cierran el recurso al terminar incluso si ocurre una excepción. - Control de la codificación. Conviene indicar explícitamente
UTF-8al leer o escribir texto para evitar que caracteres como tildes o eñes dependan de la configuración del sistema. - Procesamiento completo o por flujo.
getTextyreadLinescargan el contenido en memoria y resultan cómodos para archivos pequeños. Para documentos grandes,eachLine,withReadero un flujo permiten procesar los datos gradualmente. - Soporte para formatos estructurados. Las herramientas de la plataforma permiten trabajar con XML y JSON, mientras que formatos como PDF, DOCX o XLSX suelen requerir bibliotecas específicas.
- Operaciones diferenciadas.
withWriterreemplaza el contenido existente, mientras queappendañade información al final. Elegir la operación correcta evita sobrescrituras accidentales. - Validación y manejo de errores. Antes de procesar un documento conviene comprobar su existencia, formato y permisos, y tratar excepciones de entrada/salida cuando la aplicación deba recuperarse del fallo.
¿Por qué aprender Manipular Documentos con Groovy?
Sección titulada «¿Por qué aprender Manipular Documentos con Groovy?»Esta capacidad permite automatizar tareas habituales: generar informes, exportar resultados, importar datos, convertir formatos, preparar archivos de configuración y procesar documentos recibidos de otros sistemas. Resulta especialmente útil en scripts, procesos por lotes, pruebas y canalizaciones de integración.
La sintaxis compacta de Groovy facilita separar la lógica del negocio de la gestión de recursos. En lugar de dedicar varias líneas a abrir y cerrar un escritor, una closure delimita la operación y deja explícito dónde se produce la escritura.
También ayuda a escoger una estrategia apropiada para cada caso. Un informe pequeño puede construirse como texto; un XML debe analizarse según su estructura; un PDF necesita un motor que gestione páginas, fuentes y maquetación. Conocer estas diferencias evita tratar todos los documentos como simples cadenas y permite reutilizar el amplio ecosistema de Java.
Ejemplo de Manipular Documentos con Groovy
Sección titulada «Ejemplo de Manipular Documentos con Groovy»El siguiente script genera un informe de ventas en un archivo de texto y después lo lee para mostrar su contenido:
List<Map<String, Object>> ventas = [ [producto: 'Teclado', importe: 49.90G], [producto: 'Ratón', importe: 24.50G], [producto: 'Monitor', importe: 189.00G]]
BigDecimal total = ventas.sum(0.0G) { venta -> venta.importe as BigDecimal}
File documento = new File('informe-ventas.txt')
documento.withWriter('UTF-8') { writer -> writer.writeLine('INFORME DE VENTAS')
ventas.each { venta -> writer.writeLine("${venta.producto};${venta.importe}") }
writer.writeLine("TOTAL;${total}")}
String contenido = documento.getText('UTF-8')println contenidoEl método withWriter('UTF-8') crea el archivo si no existe y reemplaza su contenido si ya existe. La closure recibe el escritor, genera una cabecera, añade una línea por venta y escribe el total calculado.
Al salir de la closure, el escritor se cierra automáticamente. Después, getText('UTF-8') lee el documento completo. El resultado esperado es:
INFORME DE VENTASTeclado;49.90Ratón;24.50Monitor;189.00TOTAL;263.40Para un archivo grande sería preferible procesar sus líneas con eachLine o withReader, en lugar de cargar todo el contenido mediante getText.
Artículos en Documentos
Puedes consultar todos los artículos de Documentos que tenemos en Línea de Código.