我有一个java程序,它使用jcifs库-samba将文件写入远程机器文件系统;SmbFile=>SmbFileOutputStream=>PrintStream和I使用公共println(String)。一切都很好,直到我把我的应用程序移到linux机器上,现在我的远程windows机器上打印的文件看起来很奇怪。
我认为问题在于这两个操作系统如何处理println()函数插入的CR、LF。我的"jar"每天执行一次,它是由"crontab"通过"sh"启动文件触发的。
- 有没有一种方法可以在不接触java代码的情况下解决这个问题
- 有没有一种方法可以编写一个java程序,使其在这两种操作系统(可能是所有操作系统)上都能工作
感谢
尝试使用系统属性"line.separator"。您可以阅读此内容以供参考。
您必须更改文件中的换行符。在linux中,有一个名为dos2unix的实用程序,它可以将现有文件的换行符从dos/windows转换为linux/unix。
System.out.println是一个PrintStream,它使用line.separator的环境设置作为它的行分隔符。解决问题的一个方法是传递-Dline.separator参数。
也许最好的解决方案是使用更好的编辑器查看文件。Notepad++和Windows上的许多其他软件都能理解这两种类型的行尾,而记事本则不会。即使是内置的wordpad也能更好地显示unix文件的结尾。
如果您的java文件在linux机器中运行,println将使用linux标准"\n"如果您希望它始终使用,\r\n而不更改系统属性,只需替换println("text")与print("text\r\n")。或者创建一个自定义函数printWindowsLine来完成