web-dev-qa-db-ja.com

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

ご覧のとおり、テキストはテキストごとに新しい行で区切られるのではなく、すべてまとめられます。リストに追加する方法に関係があると思いますか?

41
StartingGroovy

あなたはWindowsで作業しているように見えますが、その場合は_\n_ではなく_\r\n_の改行文字

たとえば、System.getProperty("line.separator")を使用して、常に正しい改行文字を取得できます。

30
mfloryan

@Stevenが指摘しているように、より良い方法は次のとおりです。

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

これはあなたのために行セパレーターを処理し、ライターを閉じることも処理するので

(また、行を書き込むたびにファイルを開いたり閉じたりしないため、元のバージョンでは遅くなる可能性があります)

77
tim_yates

PrintWriterを使用する方がクリーンな場合があり、そのメソッドはprintlnです。

8
Steven

私はこの質問に出会い、他の貢献者に触発されました。 1行に1回、ファイルにコンテンツを追加する必要があります。これが私がしたことです。

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

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

かなりきれいだと思う:)

7
Patrick

IDのコメント:14。私にとっては書くのがかなり簡単です:

out.append it

の代わりに

out.println it

printlnは私のマシンでArrayListの最初のファイルのみを書き込み、追加するとList全体をファイルに書き込みました。

とにかく迅速で汚い解決のために。

0
Alex