首页 > 解决方案 > Java 无法识别一台计算机上的日志文件中的换行符 \n

问题描述

我有这段代码用于将结果日志写入 txt 文件

aWriter.write(date + ";" + outcome + ";" + var2 + ";" + var + ";" + time + ";" + code + "\n");

当我在我的计算机上打开 log.txt 文件时,一切都如预期的那样,例如:

> 2018-12-17;OK;456;456;14:0:9;123456
> 2018-12-17;OK;487;487;14:0:13L123456
> 2018-12-17;OK;456987;456987;14:0:20;123456
> 2018-12-18;NOK;3;123;8:51:12;123456

但是,当我在运行程序的另一台计算机上打开此日志文件时,我得到以下结果:

2018-12-17;OK;456;456;14:0:9;1234562018-12-17;OK;487;487;14:0:13L1234562018-12-17;OK;456987;456987;14:0:20;1234562018-12-18;NOK;3;123;8:51:12;123456

这是什么原因?这是我的代码还是只是一些 Windows 默认设置?

标签: javawindowsjavafx

解决方案


并非每个系统都使用相同的行尾(并且某些文本编辑器期望\r\n而不是\n因为这是 Windows 的特定于平台的行分隔符),您可以使用%n某种Formatter

'n' System.getProperty("line.separator") 返回的特定于平台的行分隔符。

像这样使用String#format

aWriter.write(
        String.format("%s%n", String.join(";", date, outcome, var2, var, time, code)));
//                       ^ %s prints the string, %n the line ending

或者更像您的原始代码(不带%n):

aWriter.write(String.join(";", date, outcome, var2, var, time, code) 
        + System.getProperty("line.separator"));

或者

您可以配置文本编辑器将查找的行尾,此配置特定于您选择的文本编辑器。

我做了一个小测试,如果您想继续使用Notepad第一个解决方案,如果您使用正确的行尾,它将正确呈现文件。否则Notepad++将能够按原样读取您的文件。


推荐阅读