簡體   English   中英

將新行添加到BufferedWriter

[英]Appending a new line to a BufferedWriter

我試圖寫一個文本文件,並在每次連續調用writeMore()寫入一個新行,如果將true作為最后一個參數傳遞的話。 但是,作者繼續寫到同一第一行的末尾。 我不明白問題是什么。

package FileIO;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class Buffered_Writer {

    public static void main(String[] args) throws IOException{

        String fileName = "myFile.txt";
        String message = "I'm written into the file.";

        File myFile = new File("C:\\Users\\User\\Desktop\\" + fileName);
        try {
            myFile.createNewFile();
        } catch (Exception e) {
            System.out.println("Could not create file!");
        }


        BufferedWriter writer = new BufferedWriter(new FileWriter(myFile, true));
        writer.write(message);

        writeMore("This much more has been written.", myFile, true);

        writer.close();
    }

    public static void writeMore(String message, File file, boolean newLine) throws IOException{

        BufferedWriter writer = new BufferedWriter(new FileWriter(file, true));
        if (newLine) {
            writer.append(" \n");
            writer.append(message);
        }
        else {
            writer.append(" " + message);
        }
        writer.close();
    }
}

為什么不使用正確的方法

https://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html#newLine()

根據javadocs

寫一個行分隔符。 行分隔符字符串由系統屬性line.separator定義,不一定是單個換行符('\\ n')。

給定

File myFile = new File("C:\\Users\\User\\Desktop\\" + fileName);

我可以推斷出您在Windows上。 Windows行分隔符不是\\n (它是\\r\\n但不要對其進行硬編碼)。 使用System.lineSeparator()代替。 更改

writer.append(" \n");

writer.append(System.lineSeparator());

最好的解決方案是使用BufferedWriter.newLine()方法。 另外,應該正確關閉BufferedWriter (使用try with resources ):

public static void writeMore(String message, File file, boolean newLine) throws IOException {
    try (BufferedWriter writer = new BufferedWriter(new FileWriter(file, true))) {
        if (newLine) {
            writer.newLine();
            writer.append(message);
        } else
            writer.append(" ").append(message);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM