¿Cómo leer un archivo en Groovy en una cadena?

Resuelto raffian asked hace 12 años • 6 respuestas

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?

raffian avatar Oct 11 '11 23:10 raffian
Aceptado
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')
Dónal avatar Oct 11 '2011 16:10 Dónal

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.

jaetzold avatar Oct 24 '2012 09:10 jaetzold

Una ligera variación...

new File('/path/to/file').eachLine { line ->
  println line
}
linus1412 avatar Oct 12 '2011 15:10 linus1412

En mi caso, new File()no funciona, provoca un error FileNotFoundExceptioncuando 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.

P Kuijpers avatar May 31 '2018 11:05 P Kuijpers

la forma más fácil sería

new File(filename).getText()

lo que significa que podrías simplemente hacer:

new File(filename).text
Reverend Gonzo avatar Oct 11 '2011 16:10 Reverend Gonzo