java - 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 默认设置?
解决方案
并非每个系统都使用相同的行尾(并且某些文本编辑器期望\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++
将能够按原样读取您的文件。
推荐阅读
- autohotkey - 我的脚本在某些时候崩溃了,我已经消除了调试器能够发现的所有语法错误
- reactjs - 使用 React 在 ASP.NET Core 3 中更改用于获取数据的基本 URL
- javascript - 带有颜色和行号的 console.log 包装器
- wpf - .net Core 3.1 WPF 关闭 Cleartype?
- javascript - 如何将文本放入 react-icons 组件中?
- html - 更改侧面和卡片之间的边距大小
- macos - macOs Time Machine:两个独立的驱动器还是一个 RAID-1?
- python - Python,将函数应用于数据是参数的熊猫数据框
- c++ - 用于交换整数的代码在 C++ 中有效,但在 C 中无效
- ruby-on-rails - 如何在 ruby 中向 json 数组添加自定义值以响应?