J'ai besoin de lire un fichier à partir du système de fichiers et de charger tout le contenu dans une chaîne dans un contrôleur groovy, quel est le moyen le plus simple de le faire?
String fileContents = new File('/path/to/file').text
Si vous devez spécifier le codage de caractères, utilisez plutôt le code suivant:
String fileContents = new File('/path/to/file').getText('UTF-8')
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. AFAIK groovy essaie de deviner le codage ici en regardant le contenu du fichier.
Si vous souhaitez un codage de caractère spécifique, vous pouvez spécifier un nom de jeu de caractères avec
String fileContents = new File('/path/to/file').getText('UTF-8')
Voir Documentation de l'API sur File.getText(String)
pour plus de détails.
Une légère variation ...
new File('/path/to/file').eachLine { line ->
println line
}
le plus simple serait
ce qui signifie que vous pouvez simplement faire:
new File(filename).text
Dans mon cas, new File()
ne fonctionne pas, il provoque un FileNotFoundException
lorsqu’il est exécuté dans un travail de pipeline Jenkins. Le code suivant a résolu cela, et est encore plus facile à mon avis:
def fileContents = readFile "path/to/file"
Je ne comprends toujours pas cette différence complètement, mais peut-être que ça aidera quelqu'un d'autre avec le même problème. L'exception a probablement été provoquée parce que 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 contenant le fichier que je voulais lire.
Ici, vous pouvez trouver un autre moyen de faire de même.
Lire le fichier.
File file1 = new File("C:\Build\myfolder\myTestfile.txt");
def String yourData = file1.readLines();
Lire le fichier complet.
File file1 = new File("C:\Build\myfolder\myfile.txt");
def String yourData= file1.getText();
Lire le fichier Line Bye Line.
File file1 = new File("C:\Build\myfolder\myTestfile.txt");
for (def i=0;i<=30;i++) // specify how many line need to read eg.. 30
{
log.info file1.readLines().get(i)
}
Créez un nouveau fichier.
new File("C:\Temp\FileName.txt").createNewFile();