テキストをファイルに単純に書き込む小さな関数を作成しましたが、各情報を新しい行に書き込むのに問題があります。誰かがすべてを同じ行に置く理由を説明できますか?
私の機能は次のとおりです。
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
ご覧のとおり、テキストはテキストごとに新しい行で区切られるのではなく、すべてまとめられます。リストに追加する方法に関係があると思いますか?
あなたはWindowsで作業しているように見えますが、その場合は_\n
_ではなく_\r\n
_の改行文字
たとえば、System.getProperty("line.separator")
を使用して、常に正しい改行文字を取得できます。
@Stevenが指摘しているように、より良い方法は次のとおりです。
public void writeToFile(def directory, def fileName, def extension, def infoList) {
new File("$directory/$fileName$extension").withWriter { out ->
infoList.each {
out.println it
}
}
}
これはあなたのために行セパレーターを処理し、ライターを閉じることも処理するので
(また、行を書き込むたびにファイルを開いたり閉じたりしないため、元のバージョンでは遅くなる可能性があります)
PrintWriterを使用する方がクリーンな場合があり、そのメソッドはprintlnです。
私はこの質問に出会い、他の貢献者に触発されました。 1行に1回、ファイルにコンテンツを追加する必要があります。これが私がしたことです。
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の最初のファイルのみを書き込み、追加するとList全体をファイルに書き込みました。
とにかく迅速で汚い解決のために。