我有一个java程序,它使用jcifs库-samba东西将文件写入远程机器文件系统; SmbFile => SmbFileOutputStream => PrintStream和我使用公共println(String)。一切正常,直到我将我的应用程序移动到Linux机器,现在我的远程Windows机器上的打印文件看起来很奇怪。
我认为问题在于两个操作系统如何处理println()函数插入的CR,LF。我的'jar'每天执行一次,它由'crontab'通过'sh'启动文件触发。
谢谢
答案 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 setting为line.separator作为其行分隔符。您的问题的一个解决方案是传入-Dline.separator参数。
可能最好的解决方案就是使用更好的编辑器来查看文件。 Notepad ++和Windows上的许多其他内容将理解两种类型的行结尾,而记事本则不会。即使是内置的wordpad也能更好地显示unix文件的结尾。