Java8:无法追加记事本中显示的新行
Java 8: Unable to append new lines that show up in notepad
我在 unix openjdk 版本 1.8 中使用 java 将数据附加到文本文件。0_151 使用 Files.write() 方法。
我读了 ,它建议我使用 System.lineSeparator()
而不是 "\n"
。
我的代码如下所示:
try {
Files.write(Paths.get("spillInfo.txt"),
(infoString + System.lineSeparator()).getBytes(),
StandardOpenOption.APPEND);
} catch (IOException e) {
System.err.println("Caught IOException: " + e.getMessage());
}
从 this question Notepad uses the ANSI charset and from this question 开始,java 中的字符集是 "cp1252"
但是当我添加 "cp1252"
或 "windows-1252"
作为 getBytes()
的参数时(或者如果我像上面的代码一样将它留空)新行不会出现在记事本中(它们确实在所有三个方面都出现在记事本++中)。
如果你 运行 你的 Java Unix 程序,System.lineSeparator() 无论如何都是 \n
。
如果你需要Windows记事本有windows行分隔符,那么使用\r\n
。
它是 Windows 记事本中的旧东西 - 它只能识别 Windows \r\n
。
Microsoft 中没有人关心它(而且从来没有关心过):-)
您还可以做的是引入您自己的系统变量并将其传递给您的 Java 程序,例如
-Dtarget_system=Windows // or Unix
然后在代码中,您可以根据
的值使用适当的行分隔符
System.getProperty("target_system")
我在 unix openjdk 版本 1.8 中使用 java 将数据附加到文本文件。0_151 使用 Files.write() 方法。
我读了 System.lineSeparator()
而不是 "\n"
。
我的代码如下所示:
try {
Files.write(Paths.get("spillInfo.txt"),
(infoString + System.lineSeparator()).getBytes(),
StandardOpenOption.APPEND);
} catch (IOException e) {
System.err.println("Caught IOException: " + e.getMessage());
}
从 this question Notepad uses the ANSI charset and from this question 开始,java 中的字符集是 "cp1252"
但是当我添加 "cp1252"
或 "windows-1252"
作为 getBytes()
的参数时(或者如果我像上面的代码一样将它留空)新行不会出现在记事本中(它们确实在所有三个方面都出现在记事本++中)。
如果你 运行 你的 Java Unix 程序,System.lineSeparator() 无论如何都是 \n
。
如果你需要Windows记事本有windows行分隔符,那么使用\r\n
。
它是 Windows 记事本中的旧东西 - 它只能识别 Windows \r\n
。
Microsoft 中没有人关心它(而且从来没有关心过):-)
您还可以做的是引入您自己的系统变量并将其传递给您的 Java 程序,例如
-Dtarget_system=Windows // or Unix
然后在代码中,您可以根据
的值使用适当的行分隔符System.getProperty("target_system")