[英]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.