Groovy写入文件(换行符)

时间:2010-11-24 22:56:32

标签: file-io groovy

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

这是我的功能:

public void writeToFile(def directory, def fileName, def extension, def infoList) {
    File file = new File("$directory/$fileName$extension")

    infoList.each {
        file << ("${it}\n")
    }
}

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

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)

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

Today is a new dayTomorrow is the futureYesterday is the past

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

5 个答案:

答案 0 :(得分:76)

正如@Steven所指出的,更好的方法是:

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

因为它为你处理行分隔符,并处理关闭作者

(每次写一行时都不会打开和关闭文件,原始版本可能会很慢)

答案 1 :(得分:30)

在我看来,就像你在Windows中工作一样,在这种情况下,新行字符不仅仅是\n而是\r\n

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

答案 2 :(得分:8)

使用PrintWriter及其方法可能更干净:println 只需确保在完成后关闭作家

答案 3 :(得分:7)

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

class Doh {
   def ln = System.getProperty('line.separator')
   File file //assume it's initialized 

   void append(String content) {
       file << "$content$ln"
   }
}

我认为非常整洁:)。

答案 4 :(得分:0)

@Comment for ID:14。 这对我来说更容易写:

out.append it

而不是

out.println it

println在我的机器上只写了ArrayList的第一个文件,并附加了我将整个List写入文件。

不管怎么说,快速而肮脏的解决方案。