Groovy写入文件(换行符)

我创build了一个简单的将文本写入文件的小函数,但是我遇到了一些问题,使得它将每条信息写入一个新行。 有人可以解释为什么它把所有的东西放在同一条线上?

这是我的function:

public void writeToFile(def directory, def fileName, def extension, def infoList) { File file = new File("$directory/$fileName$extension") infoList.each { file << ("${it}\n") } } 

我正在testing的简单代码是这样的:

 def directory = 'C:/' def folderName = 'testFolder' def c def txtFileInfo = [] String a = "Today is a new day" String b = "Tomorrow is the future" String d = "Yesterday is the past" txtFileInfo << a txtFileInfo << b txtFileInfo << d c = createFolder(directory, folderName) //this simply creates a folder to drop the txt file in writeToFile(c, "garbage", ".txt", txtFileInfo) 

上面在该文件夹中创build了一个文本文件,文本文件的内容如下所示:

 Today is a new dayTomorrow is the futureYesterday is the past 

正如你所看到的,文本全部聚拢在一起,而不是按照每个文本的新行分开。 我认为这与我如何将其添加到列表中有关系?

它在我看来,就像你在窗口中工作,在这种情况下,一个新的行字符不是简单\n而是\r\n

例如,您可以始终通过System.getProperty("line.separator")获取正确的换行符。

正如@斯蒂芬指出的,更好的方法是:

 public void writeToFile(def directory, def fileName, def extension, def infoList) { new File("$directory/$fileName$extension").withWriter { out -> infoList.each { out.println it } } } 

因为这会为您处理行分隔符,并处理closures编写器

(并且每次写入一行时都不打开和closures该文件,在原始版本中这可能会很慢)

可能使用PrintWriter更清洁,方法如下:println只要确保在完成后closures作者

我遇到了这个问题,并受到其他贡献者的启发。 我需要每行添加一些内容到一个文件。 这是我做的。

 class Doh { def ln = System.getProperty('line.separator') File file //assume it's initialized void append(String content) { file << "$content$ln" } } 

漂亮整洁我想:)

@评论ID:14。 这对我来说比较容易写:

 out.append it 

代替

 out.println it 

println在我的机器上做的只是写入ArrayList的第一个文件,附加我得到整个列表写入文件。

无论如何,快速和肮脏的解决scheme。