繁体   English   中英

Java println:Windows vs Linux

[英]Java println: Windows vs Linux

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

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

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

谢谢

尝试使用系统属性“line.separator” 您可以阅读此内容以供参考。

如果您的java文件在linux机器上运行,println将使用linux标准“\\ n”如果您希望它始终使用\\ r \\ n,而不更改系统属性,只需将println(“text”)替换为print(“text” \\ r \\ n“个)。 或者创建一个自定义函数printWindowsLine来做到这一点

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

System.out.println是一个PrintStream,它使用 line.separator 的环境设置作为其行分隔符。 您的问题的一个解决方案是传入-Dline.separator参数。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM