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 fácil de hacerlo?
309
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')
File
objeto se originó a partir de un jar de Java común. No estaba seguro de si Groovy tenía su propiaFile
clase especial con eltext
atributo, o algo así, pero parece que no importa de dóndeFile
provenga el objeto, ya sea instanciado por el código Groovy o el código Java.El camino más corto es de hecho solo
pero en este caso no tiene control sobre cómo los bytes del archivo se interpretan 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 conjunto de caracteres con
Consulte los documentos de API en
File.getText(String)
para obtener más información.fuente
someFile.text
no hace una suposición inteligente, simplemente usa la codificación predeterminada de la plataforma (generalmente UTF-8 en Linux modernos, pero algo como Windows-1252 o MacRoman en Windows / Mac OS, a menos que lo haya anulado-Dfile.encoding=...
)Una ligera variación ...
fuente
la forma más fácil sería
new File(filename).getText()
lo que significa que podrías hacer:
new File(filename).text
fuente
En mi caso
new File()
no funciona, provoca unFileNotFoundException
cuando se ejecuta en un trabajo de tubería de Jenkins. El siguiente código resolvió esto, y es aún más fácil en mi opinión:Todavía no entiendo esta diferencia por completo, pero tal vez ayude a cualquier otra persona con el mismo problema. Posiblemente, la excepción fue causada porque
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.fuente
String fp_f = readFile("any_file") if (fp.length()) { currentBuild.description = fp }
Además, si no se encuentra el archivo, entonces hay un error.Aquí puede encontrar otra forma de hacer lo mismo.
Leer archivo
Leer el archivo completo.
Leer el archivo Line Bye Line.
Crea un nuevo archivo.
fuente
def
cuando especifique el tipo.