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。