写入文件的string不保留换行符

我想写一个String (冗长,但包装),这是从JTextArea 。 当string打印到控制台时,格式与Text Area格式相同,但是当我使用BufferedWriter将它们写入文件时,它将以单行forms写入该String

以下代码可以重现它:

 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(); } } 

什么地方出了错? 如何解决这个问题? 感谢您的帮助!

来自JTextArea文本将有换行符的\n字符,而不pipe它在哪个平台上运行。 当你将其写入到文件中时,您将需要使用特定于平台的换行符来replace这些字符(对于Windows,这是\r\n ,正如其他人所提到的那样)。

我认为最好的方法是将文本包装到一个BufferedReader ,该BufferedReader可以用来遍历行,然后使用PrintWriter使用特定于平台的换行符将每行写入文件。 有一个较短的解决scheme涉及到string.replace(...) (请参阅Unbeli的评论),但速度较慢,需要更多的内存。

这是我的解决scheme – 现在变得更简单了,这要归功于Java 8中的新function:

 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)); } } 

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

我如何获得平台相关的新行字符?

基本上你想用

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

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

我只是跑你的程序,并添加一个回车( \r )在你的换行符( \n )为我做了诡计。

如果你想得到一个系统独立的行分隔符,可以在系统propery line.separatorfindline.separator

 String separator = System.getProperty("line.separator"); String string = "This is lengthy string that contains many words. So" + separator + "I am wrapping it."; 

如果您使用的是BufferedWriter,则还可以使用.newline()方法根据您的平台重新添加新行。

看到这个相关的问题: 写入文件的string不保留换行符