1

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

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

  • 有没有办法在不接触java代码的情况下解决这个问题?
  • 有没有办法编写一个java程序来让它在两种操作系统(可能全部)上工作?

谢谢

4

4 回答 4

4

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

于 2011-06-23T18:11:27.190 回答
0

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

于 2011-06-23T18:14:02.397 回答
0

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

于 2011-06-23T18:14:36.910 回答
0

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

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

于 2011-06-23T18:15:18.737 回答