353 votes

Comment lire un fichier en Groovy dans une chaîne de caractères ?

J'ai besoin de lire un fichier depuis le système de fichiers et de charger tout le contenu dans une chaîne de caractères dans un contrôleur groovy, quelle est la manière la plus simple de le faire ?

571voto

Dónal Points 61837
String fileContents = new File('/path/to/file').text

Si vous devez spécifier le codage des caractères, utilisez ce qui suit à la place :

String fileContents = new File('/path/to/file').getText('UTF-8')

8 votes

C'est la beauté de Groovy :)

1 votes

Dois-je exécuter des instructions close() ou le lecteur sera-t-il fermé par la méthode getText() ?

6 votes

@dasKeks Je pense que l'on peut supposer que l'implémentation de cette méthode ferme toutes les ressources nécessaires. De toute façon, vous n'avez pas accès aux lecteurs qui pourraient être créés, donc vous ne peut pas le fermer

85voto

jaetzold Points 671

Le chemin le plus court est en effet juste

String fileContents = new File('/path/to/file').text

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. Pour l'instant, groovy essaie de deviner l'encodage en regardant le contenu du fichier.

Si vous voulez un encodage de caractères spécifique, vous pouvez spécifier un nom de charset avec

String fileContents = new File('/path/to/file').getText('UTF-8')

Ver Documents sur l'API sur File.getText(String) pour de plus amples informations.

10 votes

+1 pour avoir recommandé la version qui prend un paramètre d'encodage. La version someFile.text ne fait pas de supposition intelligente, il utilise simplement l'encodage par défaut de la plate-forme (généralement UTF-8 sur les Linux modernes, mais quelque chose comme Windows-1252 ou MacRoman sur Windows/Mac OS, à moins que vous ne l'ayez remplacé par la commande -Dfile.encoding=... )

0 votes

Dans les versions récentes de Groovy au moins, l'estimation se fait en utilisant CharsetToolkit ce qui est une supposition intelligente.

62voto

linus1412 Points 47

Une légère variation...

new File('/path/to/file').eachLine { line ->
  println line
}

5 votes

C'est vrai, mais c'est toujours un idiome utile pour capturer "pour mémoire".

0 votes

C'est une bonne chose de voir cela - cela rend le traitement d'un fichier ligne par ligne trivial.

18voto

Reverend Gonzo Points 15504

Le moyen le plus simple serait

new File(filename).getText()

ce qui veut dire que vous pourriez juste faire :

new File(filename).text

-4voto

Piyush Points 6137
String fileContentAsString = new File("/path/file.ext").text
def fileContentAsObject = new File("/path/file.ext").text

L'extrait ci-dessus montre comment charger l'intégralité du contenu du fichier dans une variable de type chaîne et un objet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X