我需要从文件系统中读取一个文件,并将整个内容加载到Groovy控制器中的字符串中,最简单的方法是什么?
String fileContents = new File('/path/to/file').text
如果您需要指定字符编码,请改用以下内容:String fileContents = new File('/path/to/file').getText('UTF-8')
最短的路,确实如此
String fileContents = new File('/path/to/file').text
但在这种情况下,您无法控制文件中的字节如何被解释为字符。据我所知,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=...
覆盖了它)。 - Ian Roberts略有变化的一个例子是...
new File('/path/to/file').eachLine { line ->
println line
}
在我的情况下,new File()
无法正常工作,在Jenkins管道作业中运行时会导致FileNotFoundException
异常。以下代码解决了这个问题,并且在我看来更容易实现:
def fileContents = readFile "path/to/file"
我仍然不完全理解这个区别,但也许它会帮助其他遇到同样困境的人。可能异常是由于 new File()
创建了一个文件在执行Groovy代码的系统上,而这个系统与包含我想要读取的文件的系统不同。
String fp_f = readFile("any_file") if (fp.length()) { currentBuild.description = fp }
另外,如果文件未找到,则会出现错误。 - ashish在这里,您可以找到其他实现相同目标的方式。
读取文件。
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();
逐行读取文件。
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();
File
对象来自普通的Java jar包,这也是有效的。我不确定Groovy是否有自己特殊的File
类和text
属性之类的东西,但似乎无论File
对象来自哪里,无论是由Groovy代码还是Java代码实例化的,都没有关系。 - ArtOfWarfare