写入文件的字符串不保留换行符

2022-09-02 12:49:36

我正在尝试写一个(冗长但包装),这是从.当字符串打印到控制台时,格式与 中的格式相同,但是当我使用 BufferedWriter 将它们写入文件时,它是在一行中写入的。StringJTextAreaText AreaString

以下代码段可以重现它:

public class BufferedWriterTest {
    public static void main(String[] args) throws IOException {
        String string = "This is lengthy string that contains many words. So\nI am wrapping it.";
        System.out.println(string);
        File file = new File("C:/Users/User/Desktop/text.txt");
        FileWriter fileWriter = new FileWriter(file);
        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
        bufferedWriter.write(string);
        bufferedWriter.close();
    }
}

哪里出错了?如何解决这个问题?感谢您的任何帮助!


答案 1

来自 的文本将包含换行符,无论它在哪个平台上运行。在将这些字符写入文件时,您将需要将这些字符替换为特定于平台的换行符(对于 Windows,这是 ,正如其他人所提到的)。JTextArea\n\r\n

我认为最好的方法是将文本包装成一个 ,这可以用来迭代行,然后使用a将每行都写出到一个文件中,使用特定于平台的换行符。有一个较短的解决方案涉及(参见Unbeli的评论),但它更慢,需要更多的内存。BufferedReaderPrintWriterstring.replace(...)

这是我的解决方案 - 由于Java 8中的新功能,现在变得更加简单:

public static void main(String[] args) throws IOException {
    String string = "This is lengthy string that contains many words. So\nI am wrapping it.";
    System.out.println(string);
    File file = new File("C:/Users/User/Desktop/text.txt");

    writeToFile(string, file);
}

private static void writeToFile(String string, File file) throws IOException {
    try (
        BufferedReader reader = new BufferedReader(new StringReader(string));
        PrintWriter writer = new PrintWriter(new FileWriter(file));
    ) {
        reader.lines().forEach(line -> writer.println(line));
    }
}

答案 2

请参阅以下有关如何正确处理换行符的问题。

如何获取依赖于平台的新行字符?

基本上你想使用

String newLineChar = System.getProperty("line.separator");

然后使用 newLineChar 而不是“\n”