【问题标题】:keeping newline characters when writing a file写入文件时保留换行符
【发布时间】:2012-12-04 05:50:00
【问题描述】:

我正在从数据库表中导出数据并将其写入文件中。换行符从数据库中正确检索并在写入字符串时保留(因此我能够重新导入导出的数据)。

我的问题是文件中的换行符是隐式的(即它们显示为换行符)。如果数据库值为字符串“line1 \r\n line2”,直接发送这个String给我的BufferedWriter + FileOutputStream的结果是 “第 1 行 第2行“

有什么方法可以将“line1 \r\n line2”字符序列准确地写入文件? (我已经尝试过 bw.write(value.toCharArray())

【问题讨论】:

  • 虽然它们显示为换行符(因为它们就是这样),但字符仍然存在。如果需要验证,以编程方式加载文件并将其显示为字符数组以验证这一点。
  • 我知道信息在那里(这就是为什么我可以重新导入数据库中的数据)但我希望能够告诉 Java 不要解释它们,而只是将它们打印为字符串,就好像它们是普通字符一样(只是让数据库在导入文件时重新解释它们)。否则文件会太长
  • 您可以在这里找到答案:[从缓冲区读取时省略换行符][1] [1]:stackoverflow.com/questions/4825263/…
  • 您需要对每个转义字符进行replaceAll,并转义其反斜杠。一个例子:str.replaceAll("\n", "\\n").
  • 你说得对,这应该可以。您可能希望将此添加为答案而不是评论,以便我可以将其标记为正确

标签: java newline


【解决方案1】:

您可以用双反斜杠替换每个转义序列:

public static String escapeChars(String str) {
    char[][] escapes = {
            { '\n', 'n' },
            { '\r', 'r' },
            { '\f', 'f' },
            { '\b', 'b' },
            { '\t', 't' }
    };
    for (char[] escape : escapes) {
        str = str.replaceAll(Character.toString(escape[0]), "\\\\" + escape[1]);
    }
    return str;
}

可以轻松添加双撇号和单撇号转义,但我在此答案中省略了它。

【讨论】:

    猜你喜欢
    • 2021-10-28
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 2016-08-20
    • 2020-12-29
    • 1970-01-01
    • 2012-10-15
    相关资源
    最近更新 更多