Preciso ler um arquivo do sistema de arquivos e carregar todo o conteúdo em uma string em um controlador groovy. Qual é a maneira mais fácil de fazer isso?
309
String fileContents = new File('/path/to/file').text
Se você precisar especificar a codificação de caracteres, use o seguinte:
String fileContents = new File('/path/to/file').getText('UTF-8')
File
objeto tenha sido originado de um jar Java comum. Eu não tinha certeza se talvez o Groovy tivesse sua própriaFile
classe especial com otext
atributo, ou algo assim, mas parece que não importa de onde oFile
objeto vem, seja instanciado pelo código Groovy ou código Java.O caminho mais curto é de fato apenas
mas, nesse caso, você não tem controle sobre como os bytes no arquivo são interpretados como caracteres. O AFAIK groovy tenta adivinhar a codificação aqui, observando o conteúdo do arquivo.
Se você deseja uma codificação de caracteres específica, pode especificar um nome de conjunto de caracteres com
Consulte os documentos da API
File.getText(String)
para obter mais referências.fonte
someFile.text
não faz um palpite inteligente, simplesmente usa a codificação padrão da plataforma (geralmente UTF-8 nos Linux modernos, mas algo como windows-1252 ou MacRoman no Windows / Mac OS, a menos que você a tenha substituído-Dfile.encoding=...
)Uma ligeira variação ...
fonte
a maneira mais fácil seria
new File(filename).getText()
o que significa que você pode fazer:
new File(filename).text
fonte
No meu caso
new File()
, não funciona, causaFileNotFoundException
quando executado em um trabalho de pipeline do Jenkins. O código a seguir resolveu isso e é ainda mais fácil na minha opinião:Ainda não entendo completamente essa diferença, mas talvez isso ajude outras pessoas com o mesmo problema. Possivelmente, a exceção foi causada porque
new File()
cria um arquivo no sistema que executa o código do groovy, que era um sistema diferente daquele que contém o arquivo que eu queria ler.fonte
String fp_f = readFile("any_file") if (fp.length()) { currentBuild.description = fp }
Além disso, se o arquivo não for encontrado, haverá um erro.Aqui você pode encontrar outra maneira de fazer o mesmo.
Leia o arquivo.
Leia o arquivo completo.
Leia o arquivo Line Bye Line.
Crie um novo arquivo.
fonte
def
quando especifica o tipo.