Ich muss eine Datei aus dem Dateisystem lesen und den gesamten Inhalt in eine Zeichenfolge in einem groovigen Controller laden. Was ist der einfachste Weg, dies zu tun?
309
String fileContents = new File('/path/to/file').text
Wenn Sie die Zeichenkodierung angeben müssen, verwenden Sie stattdessen Folgendes:
String fileContents = new File('/path/to/file').getText('UTF-8')
File
Objekt aus einem gewöhnlichen Java-Glas stammt. Ich war mir nicht sicher, ob Groovy vielleicht eine eigene spezielleFile
Klasse mit demtext
Attribut oder so hatte, aber es scheint, dass es keine Rolle spielt, woher dasFile
Objekt kommt, ob es durch Groovy-Code oder Java-Code instanziiert wird.Der kürzeste Weg ist in der Tat gerecht
In diesem Fall haben Sie jedoch keine Kontrolle darüber, wie die Bytes in der Datei als Zeichen interpretiert werden. AFAIK groovy versucht, die Codierung hier anhand des Dateiinhalts zu erraten.
Wenn Sie eine bestimmte Zeichenkodierung wünschen, können Sie einen Zeichensatznamen mit angeben
Weitere Informationen finden
File.getText(String)
Sie in den API-Dokumenten .quelle
someFile.text
macht keine intelligente Vermutung, sondern verwendet einfach die Standardcodierung der Plattform (normalerweise UTF-8 unter modernen Linuxen, aber so etwas wie Windows-1252 oder MacRoman unter Windows / Mac OS, es sei denn, Sie haben es überschrieben-Dfile.encoding=...
)Eine leichte Variation ...
quelle
der einfachste Weg wäre
new File(filename).getText()
was bedeutet, dass Sie einfach tun könnten:
new File(filename).text
quelle
In meinem Fall
new File()
funktioniert es nicht, es führt zu einemFileNotFoundException
Ausführen in einem Jenkins-Pipeline-Job. Der folgende Code hat dies gelöst und ist meiner Meinung nach noch einfacher:Ich verstehe diesen Unterschied immer noch nicht vollständig, aber vielleicht hilft es jedem anderen mit den gleichen Problemen. Möglicherweise wurde die Ausnahme verursacht, weil
new File()
auf dem System eine Datei erstellt wurde, die den groovigen Code ausführt. Dies war ein anderes System als das, das die Datei enthält, die ich lesen wollte.quelle
String fp_f = readFile("any_file") if (fp.length()) { currentBuild.description = fp }
Wenn die Datei nicht gefunden wird, liegt ein Fehler vor.Hier finden Sie einen anderen Weg, um dasselbe zu tun.
Datei lesen.
Vollständige Datei lesen.
Datei lesen Line Bye Line.
Erstellen Sie eine neue Datei.
quelle
def
wenn Sie den Typ angeben.