Java println:Windows vs Linux

时间:2011-06-23 18:08:27

标签: java windows linux newline println

我有一个java程序,它使用jcifs库-samba东西将文件写入远程机器文件系统; SmbFile => SmbFileOutputStream => PrintStream和我使用公共println(String)。一切正常,直到我将我的应用程序移动到Linux机器,现在我的远程Windows机器上的打印文件看起来很奇怪。

我认为问题在于两个操作系统如何处理println()函数插入的CR,LF。我的'jar'每天执行一次,它由'crontab'通过'sh'启动文件触发。

  • 有没有办法解决问题而不触及java代码?
  • 有没有办法编写一个java程序,使它适用于两种操作系统(可能都是这些操作系统)?

谢谢

4 个答案:

答案 0 :(得分:4)

尝试使用系统属性“line.separator”。您可以阅读this for reference.

答案 1 :(得分:0)

如果您的java文件在linux机器上运行,println将使用linux标准“\ n” 如果你想要它总是使用\ r \ n,而不改变系统属性,只需更换你的 println(“text”)with print(“text \ r \ n”)。或者创建一个自定义函数printWindowsLine来执行该操作

答案 2 :(得分:0)

您必须更改文件中的新行分隔符。在linux中,有一个名为dos2unix的实用程序,它将现有文件的新行分隔符从dos / windows转换为linux / unix。

答案 3 :(得分:0)

System.out.println是一个PrintStream,uses the environment settingline.separator作为其行分隔符。您的问题的一个解决方案是传入-Dline.separator参数。

可能最好的解决方案就是使用更好的编辑器来查看文件。 Notepad ++和Windows上的许多其他内容将理解两种类型的行结尾,而记事本则不会。即使是内置的wordpad也能更好地显示unix文件的结尾。