Answers:
String fileContents = new File('/path/to/file').text
如果需要指定字符编码,请改用以下内容:
String fileContents = new File('/path/to/file').getText('UTF-8')
File
对象源自普通的Java jar,它也可以工作。我不确定Groovy是否具有自己的File
带有text
属性的特殊类,或者类似的东西,但是似乎File
对象的来源无关紧要,无论它是由Groovy代码还是由Java代码实例化的。
最短的方法确实是
String fileContents = new File('/path/to/file').text
但是在这种情况下,您无法控制文件中的字节如何解释为字符。AFAIK groovy尝试通过查看文件内容来猜测此处的编码。
如果您想要特定的字符编码,则可以使用
String fileContents = new File('/path/to/file').getText('UTF-8')
有关更多参考,请参见API文档File.getText(String)
。
someFile.text
不会做出明智的猜测,它只是使用平台默认编码(通常在现代Linux上使用UTF-8,但在Windows / Mac OS上使用诸如Windows-1252或MacRoman之类的东西,除非您用覆盖了它-Dfile.encoding=...
)
在我的情况下new File()
不起作用,它会导致FileNotFoundException
在Jenkins管道作业中运行。下面的代码解决了这个问题,在我看来甚至更简单:
def fileContents = readFile "path/to/file"
我仍然不完全了解这种区别,但是也许会对其他有同样麻烦的人有所帮助。可能是由于new File()
在系统上创建了一个执行常规代码的文件而导致的异常,该文件与包含我要读取的文件的系统不同。
String fp_f = readFile("any_file") if (fp.length()) { currentBuild.description = fp }
此外,如果未找到文件,则有错误。
在这里,您可以找到其他相同的方法。
读取文件。
File file1 = new File("C:\Build\myfolder\myTestfile.txt");
def String yourData = file1.readLines();
读取完整文件。
File file1 = new File("C:\Build\myfolder\myfile.txt");
def String yourData= file1.getText();
读取文件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)
}
创建一个新文件。
new File("C:\Temp\FileName.txt").createNewFile();
def
指定类型时,我不确定您是否需要。