首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >写入文件的字符串不保留换行符

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

Stack Overflow用户
提问于 2012-02-09 02:25:50
回答 5查看 56.8K关注 0票数 19

我正在试着写一个来自JTextAreaString(冗长但包装好)。当字符串打印到控制台时,格式与在Text Area中相同,但当我使用BufferedWriter将其写入文件时,它将在单行中写入String

下面的代码片段可以重现它:

代码语言:javascript
复制
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();
    }
}

哪里出了问题?如何解决这个问题?谢谢你的帮助!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-02-09 02:54:32

来自JTextArea的文本将使用\n字符作为换行符,而不管它运行在哪种平台上。在将其写入文件时,您可能希望将这些字符替换为特定于平台的换行符(对于Windows,这是\r\n,正如其他人所提到的)。

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

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

代码语言:javascript
复制
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));
    }
}
票数 18
EN

Stack Overflow用户

发布于 2012-02-09 02:39:08

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

How do I get a platform-dependent new line character?

基本上,您想要使用

代码语言:javascript
复制
String newLineChar = System.getProperty("line.separator");

然后使用newLineChar代替"\n“

票数 7
EN

Stack Overflow用户

发布于 2012-02-09 02:35:04

我刚刚运行了您的程序,在换行符(\n)之前添加回车符(\r)可以帮我解决这个问题。

如果您想获得系统独立的行分隔符,可以在系统属性line.separator中找到

代码语言:javascript
复制
String separator = System.getProperty("line.separator");
String string = "This is lengthy string that contains many words. So" + separator
            + "I am wrapping it.";
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9199216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档