话不多说,先来看一下代码

// 将要输出的字符串
String text = "第一行\n第二行\n第三行";
// 建立字符输出流
try(FileWriter fr = new FileWriter("src/1.txt")) {
    // 输出字符串
    fr.write(text);
} catch (Exception e) {
    e.printStackTrace(); 
}

当我们输出后,用windows记事本打开会发现压根就没有换行

然而,用notePad++打开,却发现换行了

这是为啥呢,因为Java里换行符是\n,而windows里认定的换行符是\r\n,所以你用windows自带的记事本打开,它就不会识别\n。 所以将来要进行字符串输出的话,就必须要将\n转换为\r\n

String text = "第一行\n第二行\n第三行";
try(FileWriter fr = new FileWriter("src/1.txt")) {
    // 将\n替换成\r\n
    text = text.replaceAll("(?!\\r)\\n", "\r\n");
    fr.write(text);
} catch (Exception e) {
    e.printStackTrace(); 
}

这样替换后,就OK了。

3 Thoughts to “java关于字符串输出到本地文件后,没有换行的问题”

  1. Pix

    但是这里存在一个问题,就是如果你是读到java的txt文档,即自带\r\n的情况下,在java也会显示换行,但\r也保留了。如果直接使用\r\n替换\n,那么就会变成\r\r\n。两边显示都没问题,但如果反复几次\r会越来越多。这么处理的前提应该是保证只有\n没有\r\n的情况。

    1. Pix

      哦 可能是我没看懂正则表达式,尴尬哈

      1. RudeCrab

        刚好借你这一楼解释一下这个正则为啥这样写,就像你之前所说的一样,如果一碰到\n就替换成\r\n,那么如果碰到\r\n就会导致\r越来越多,所以就必须加一个限定条件:如果只是单个\n才替换,\n前有\r的话就不会替换,即text = text.replaceAll(“(?!\\r)\\n”, “\r\n”);

Leave a Comment