我有一个Java程序,它在UNIX服务器上生成一个文本文件。然后使用其他系统将此文本文件发送到客户的计算机,该系统应在Windows上的记事本中打开。我们很清楚,记事本将无法找到新行,因为它使用的是Windows CR LF。
我正在使用
System.getProperty("line.separator");
是否存在另一种实现平台独立的方式,以便在UNIX上生成的文件可以在Windows记事本中以正确的格式显示,例如更改新行的某些UNIX属性?
记事本是先决条件,因此无法改变。
答案 0 :(得分:4)
没有。您需要选择单一文件格式,Windows或UNIX。鉴于您的客户需要记事本,您可以选择Windows格式,这意味着您只需要“\ r \ n”字符。 UNIX生成文件的事实可以被认为是无关紧要的。
答案 1 :(得分:4)
自Java 7以来 System.lineSeparator()
..
我遇到了这个问题,其他人也有机会这样做。我知道这是一个相当古老的帖子,但众所周知,Java API随着时间的推移而不断变化。 IMO可以使用自Java 7以来一直存在的System.lineSeparator()
API在Java中编写适用于不同操作系统的新行字符。请检查这一点,
System.lineSeperator()
答案 2 :(得分:0)
Mac OS X支持CR,LF和CRLF Linux使用LF,但使用CRLF和CR的文件也会渲染。 Windows使用CRLF
答案:只使用CRLF,然后你就支持所有平台。
CR ='\ r',LF ='\ n'
所以只需制作格式的字符串:“mytexthereblahblahblah \ r \ n”
答案 3 :(得分:0)
System.getProperty("line.separator");
这是错误的。您不关心系统的行分隔符是什么。您需要以 file 应该包含的格式写出文件。系统生成文件无关紧要。
文件是字节流。您需要写出文件格式表明您应该编写的字节流,这与任何系统使用的单独行无关。
答案 4 :(得分:0)
您是否检查过UNIX服务器是否可以容忍Windows样式的换行符?由于需求是在记事本中编辑的,因此您需要使用System.print("\r\n")
将Windows样式换行符放在文件中。
如果UNIX服务器无法处理Windows行分隔符,那么您最好的选择可能是在编辑后使用UNIX服务器上的dos2unix转换换行符来处理该文件。
记事本要求意味着这不是一个真正的平台独立性要求 - 这是Unix服务器要求理解Windows换行符的要求。
答案 5 :(得分:0)
没有直接的方法来拥有这种可互操作的简单文本文件。因此,必须转移到doc或excel或pdf等结构化文件,或者只是将格式修复为Windows或UNIX,并通知最终用户使用相同的文件。
这个答案是上述讨论的总和。
非常感谢社区的帮助。如果发现任何其他解决方案的问题。请发帖给其他人:)