¿Cómo leer un archivo en Groovy en una cadena?
Necesito leer un archivo del sistema de archivos y cargar todo el contenido en una cadena en un controlador maravilloso, ¿cuál es la forma más sencilla de hacerlo?
String fileContents = new File('/path/to/file').text
Si necesita especificar la codificación de caracteres, utilice lo siguiente:
String fileContents = new File('/path/to/file').getText('UTF-8')
De hecho, el camino más corto es simplemente
String fileContents = new File('/path/to/file').text
pero en este caso no tienes control sobre cómo se interpretan los bytes del archivo como caracteres. AFAIK groovy intenta adivinar la codificación aquí mirando el contenido del archivo.
Si desea una codificación de caracteres específica, puede especificar un nombre de juego de caracteres con
String fileContents = new File('/path/to/file').getText('UTF-8')
Consulte los documentos de APIFile.getText(String)
para obtener más referencias.
Una ligera variación...
new File('/path/to/file').eachLine { line ->
println line
}
En mi caso, new File()
no funciona, provoca un error FileNotFoundException
cuando se ejecuta en un trabajo de canalización de Jenkins. El siguiente código resolvió esto y, en mi opinión, es aún más fácil:
def fileContents = readFile "path/to/file"
Todavía no entiendo completamente esta diferencia, pero tal vez ayude a alguien más con el mismo problema. Posiblemente la excepción se debió a que new File()
crea un archivo en el sistema que ejecuta el código maravilloso, que era un sistema diferente al que contiene el archivo que quería leer.
la forma más fácil sería
new File(filename).getText()
lo que significa que podrías simplemente hacer:
new File(filename).text