【问题标题】:JTextArea txt; txt.getText() skips "\n"JTextArea txt; txt.getText() 跳过“\n”
【发布时间】:2013-03-18 17:42:32
【问题描述】:

我在 TextArea 中有一些文本,我想将其保存在文件中,我的代码在这里:

private void SaveFile() {
    try {

        String content = txt.getText();

        File file = new File(filename);

        if (!file.exists()) {
            file.createNewFile();
        }

        FileWriter fw = new FileWriter(file.getAbsoluteFile());
        BufferedWriter bw = new BufferedWriter(fw);
        bw.write(content);
        bw.close();

    } catch (IOException e) {
        e.printStackTrace();
    }

}

但它保存时没有“\n”;在新文件中,一切都在一行上; 我也能预见到那些“进入”吗? 提前谢谢你

问题是因为记事本,所以这里是解决方案:

private void SaveFile() {
    try {

        String content = txt.getText();
        content = content.replaceAll("(?!\\r)\\n", "\r\n");

        File file = new File(filename);

        // if file doesnt exists, then create it
        if (!file.exists()) {
            file.createNewFile();
        }

        FileWriter fw = new FileWriter(file.getAbsoluteFile());
        BufferedWriter bw = new BufferedWriter(fw);
        bw.write(content);
        bw.close();

    } catch (IOException e) {
        e.printStackTrace();
    }

}

感谢您的帮助

【问题讨论】:

  • 你能分享txt.getText();的输出吗?
  • 你如何验证这个跳过的'\n'。一些文本编辑器 (grrr notepad) ksip \n 支持回车 (\r) 尝试其他文本编辑器。
  • \n 被视为新行。所以尝试通过附加转义字符来添加它,如 \\n
  • Quirliom - 你是对的。谢谢你
  • @Quirliom 也许你应该把它作为答案。

标签: java swing io


【解决方案1】:

它应该工作。尝试使用显示行尾 \r 和 \n 的文本编辑器,看看会发生什么。

如果您想确保文本文件可以被 Windows 实用程序(如仅理解 \r\n 的记事本)打开,您必须通过这种方式自行对其进行规范化:

content = content.replaceAll("(?!\\r)\\n", "\r\n");

这会将所有前面没有\r\n 替换为序列\r\n

【讨论】:

    【解决方案2】:

    您应该使用 Swing 文本组件提供的 read() 和 write() 方法。请参阅Text and New Lines 了解更多信息。

    如果您希望输出包含特定的 EOL 字符串,那么您应该在为您的文本组件创建文档后使用以下内容:

    textComponent.getDocument().putProperty(DefaultEditorKit.EndOfLineStringProperty, "\r\n");
    

    【讨论】:

      【解决方案3】:

      \ 字符转义下一个字符,正如您所说的 \n 将创建一个换行符。如果你想输出一个实际的\,你需要写:

      “\n”

      【讨论】:

      • 我在记事本中打开了我的保存文件,它在一行中显示了我。但是当我在其他编辑器中打开它时,我也“进入”了,所以这是记事本的错误: D
      • 将数据保存在文本区域的\\n中
      【解决方案4】:

      您可以使用PrintWriter 将新行打印到文件中。在扫描 TextArea 的文本时,如果 TextArea 的文本包含“\\n”,则使用 PrintWriter 的 println() 方法,否则只需使用 print() !

      【讨论】:

        【解决方案5】:

        您的 TextArea 的内容在一个字符串中。现在您可以在换行符处拆分它,然后您将获得您的 String[]。然后您可以迭代 String[] 数组并将其写入您的文件中:

        private void SaveFile() {
                try {
                    String content = txt.getText();
                    File file = new File(filename);
                    if (!file.exists()) {
                        file.createNewFile();
                    }
                    FileWriter fw = new FileWriter(file.getAbsoluteFile());
                    BufferedWriter bw = new BufferedWriter(fw);
                    for (String line : content.split("\\n")) {
                        bw.write(content);
                    }
        
                    bw.close();
        
                } catch (IOException e) {
                    e.printStackTrace();
                }
        
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-08
          • 2015-02-11
          • 2015-06-07
          • 1970-01-01
          • 2011-11-30
          • 1970-01-01
          相关资源
          最近更新 更多