当前位置: 首页 > 面试题库 >

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

尹何平
2023-03-14
问题内容

我正在尝试写一个String(冗长但已包装),来自JTextArea。当字符串打印到控制台时,格式与中相同Text Area,但是当我使用BufferedWriter将它们写入文件时,它是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();
    }
}

什么地方出了错?如何解决呢?谢谢你的帮助!


问题答案:

不论运行在什么平台上,a中的文本JTextArea都将带有\n换行符。在将其写入文件时,您将需要用特定于平台的换行符替换这些字符(对于Windows,这是\r\n,正如其他人提到的那样)。

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

这是我的解决方案-由于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));
    }
}


 类似资料:
  • 编程相对较新。我想读取一个URL,修改文本字符串,然后将其写入以行分隔的csv文本文件。 阅读 但我无法将相同的字符串写入文件——它只会变成一行(请参阅下面的循环,尝试1) 我想我正在寻找一种方法,在FileWriter或BufferedWriter循环中,将字符串finalDataA转换为数组字符串(即包括字符串后缀[0]),但我还没有找到这样一种方法,不会给出类型“不能”的错误将String转

  • 问题内容: 我正在使用文本区域使用户能够输入评论。但是,如果用户输入新行,则新行在输出时不会出现。有什么办法可以使换行符停留。 知道如何保存换行符吗? 问题答案: 两种解决方案: PHP功能: 例如, 将输入内容包装在标签中。

  • 问题内容: 考虑以下功能 在下一行中每次添加要写入的内容? 例如,我想要给定字符串的每个单词在单独的lline中,例如: 写道: 问题答案: 要将文本(而不是原始字节)写入文件,应考虑使用FileWriter。您还应该将其包装在BufferedWriter中,这将为您提供newLine方法。 要将每个单词写在新行上,请使用String.split将您的文本分成单词数组。 因此,这是对您的要求的简单

  • 问题内容: 我将日志保存到sdcard上的.txt文件中,但是一旦保存了两行,它就会覆盖它并重新开始? 这是我的代码: 在恢复中挂载/ data后,/ sdcard和/ data / media / 0中的日志文件会显示完整的日志历史记录,但在设备开机时不会显示完整的日志历史记录 问题答案: 这是完成的方式。以下示例代码在单击提交按钮后将详细信息保存到文件中: 希望这可以帮助 :)

  • wef:使用apache poi写入xlsm(Excel 2007) 当我向文件中写入一个简单的字符串时,我无法打开该文件。错误-“Excel无法打开文件“Test1.xlsm”,因为文件格式或文件扩展名无效”

  • 问题内容: 所以我的代码看起来像这样: 我在行上得到了正确的输出形式,但是当我以后想要写它所显示的内容时,由于代码中没有代码,所以无需换行就可以写入文件。 问题答案: 只是打电话。 将为您的平台(无论是Windows还是Unix风格)提供行分隔符。