【问题标题】:Unable to add new line in input file using linux machine无法使用linux机器在输入文件中添加新行
【发布时间】:2016-10-21 12:49:54
【问题描述】:

我的要求是生成一个文本文件。我使用 bufferedWriter.newLine() 在我的文件中添加了新行,它在 Windows 中工作正常,但在 linux 中不工作。 我尝试了太多东西,但没有任何结果。如果我在记事本++中打开生成的文本文件,它会显示为行分隔符,但在记事本中它看起来没有任何行分隔符。在控制台中,我可以在两者中找到新行平台,但文件只有 windows 有新行,但在 linux 中没有。

下面是我的代码

File file = new File(fileToWrite);
bufferedWrtier = new BufferedWriter(new FileWriter(file));
LOGGER.debug("Line Separator 1:: "+System.getProperty("line.separator"));
LOGGER.debug("Line Separator 2:: "+System.lineSeparator());
LOGGER.debug("Line Separator 3:: "+SystemUtils.LINE_SEPARATOR);
bufferedWrtier.write(System.getProperty("line.separator"));
bufferedWrtier.write(System.lineSeparator());
bufferedWrtier.write(SystemUtils.LINE_SEPARATOR);

任何帮助将不胜感激!!!!!!!!!!

本地机器操作系统:windows 服务器机器操作系统:Linux

【问题讨论】:

  • 记事本无法处理只有 LF 的 unix EOL。它只能处理 Windows CRLF。所以你的程序没有问题,这是记事本的“问题”。
  • @jens,那么他们无法解决这个问题??
  • Windows Notepad.exe 是一个非常基本的应用程序,它无法处理以换行符(也称为 Unix 行分隔符)结尾的文本文件。您的选择是: (1) 使用其他工具,例如 Notepad++; (2) 使用将 Unix 行尾转换为 Windows 行尾的复制实用程序将文件复制到您的 Windows 机器上。
  • @KlitosKyriacou,你能简单解释一下第二点吗
  • @Madhesh 如果您使用write("\r\n") 而不是writeLine(),则可以

标签: java linux windows file


【解决方案1】:

您在这里看到的是换行符表示方式的不同,具体取决于您使用的操作系统。

你需要知道两个控制字符:

  • CL - 回车('\r'0x0D 十六进制)
  • LF - 换行('\n'0x0A 十六进制)

Windows 原生使用 CL+LF 组合换行(\r\n 组合,或两个字节),而 Linux 仅使用 LF(\n,一个字节)。

记事本是一个非常有限的工具,它只能正确解释 Windows 组合 - 如果它看到两个字节的序列 - 0x0D 后跟 0x0A 在您的文件中,它将显示为一个新行。

如果只看到0x0A而没有0x0D,它不会把它当作换行符,而是将0x0A显示为一个框(或者它会在 Windows 10 上被忽略),因为它是一个不可打印的字符。

要查看此效果,请在 Notepad++ 中打开查看所有字符:

查看 -> 显示符号 -> 显示所有字符

您会看到 Windows 文件具有 CRLF,而 Unix-like 具有 LF

类 Unix 将无法在记事本中正确显示。

您可以像这样在 Windows 和类 Unix 之间切换:

编辑 -> EOL 转换

我建议阅读the Wikipedia article 以了解更多信息,并通过SO post 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 2021-08-27
    • 2019-12-10
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    相关资源
    最近更新 更多