J'ai besoin de lire un fichier du système de fichiers et de charger tout le contenu dans une chaîne dans un contrôleur groovy, quelle est la façon la plus simple de le faire?
309
String fileContents = new File('/path/to/file').text
Si vous devez spécifier l'encodage des caractères, utilisez plutôt ce qui suit:
String fileContents = new File('/path/to/file').getText('UTF-8')
File
objet provient d'un pot de java ordinaire. Je ne savais pas si Groovy avait peut-être sa propreFile
classe spéciale avec l'text
attribut, ou quelque chose, mais il semble que peu importe d'oùFile
vient l' objet, qu'il soit instancié par du code Groovy ou du code Java.Le chemin le plus court est en effet juste
mais dans ce cas, vous n'avez aucun contrôle sur la façon dont les octets du fichier sont interprétés comme des caractères. AFAIK groovy essaie de deviner l'encodage ici en regardant le contenu du fichier.
Si vous souhaitez un codage de caractères spécifique, vous pouvez spécifier un nom de jeu de caractères avec
Voir la documentation de l'API sur
File.getText(String)
pour plus de référence.la source
someFile.text
ne fait pas de supposition intelligente, elle utilise simplement l'encodage par défaut de la plateforme (généralement UTF-8 sur les Linux modernes, mais quelque chose comme windows-1252 ou MacRoman sur Windows / Mac OS, sauf si vous l'avez remplacé-Dfile.encoding=...
)Une légère variation ...
la source
la façon la plus simple serait
new File(filename).getText()
ce qui signifie que vous pouvez simplement faire:
new File(filename).text
la source
Dans mon cas,
new File()
cela ne fonctionne pas, il provoque uneFileNotFoundException
exécution dans un travail de pipeline Jenkins. Le code suivant a résolu ce problème et est encore plus facile à mon avis:Je ne comprends toujours pas complètement cette différence, mais peut-être que cela aidera quelqu'un d'autre avec le même problème. Peut-être que l'exception a été provoquée car
new File()
crée un fichier sur le système qui exécute le code groovy, qui était un système différent de celui qui contient le fichier que je voulais lire.la source
String fp_f = readFile("any_file") if (fp.length()) { currentBuild.description = fp }
De plus, si le fichier n'est pas trouvé, il y a une erreur.Ici, vous pouvez trouver une autre façon de faire de même.
Lire le fichier.
Lire le fichier complet.
Lire le fichier Line Bye Line.
Créez un nouveau fichier.
la source
def
lorsque vous spécifiez le type.