在Java中编写适用于不同操作系统的新行字符

时间:2012-01-17 10:35:53

标签: java unix solaris newline

我有一个Java程序,它在UNIX服务器上生成一个文本文件。然后使用其他系统将此文本文件发送到客户的计算机,该系统应在Windows上的记事本中打开。我们很清楚,记事本将无法找到新行,因为它使用的是Windows CR LF。

我正在使用

System.getProperty("line.separator");

是否存在另一种实现平台独立的方式,以便在UNIX上生成的文件可以在Windows记事本中以正确的格式显示,例如更改新行的某些UNIX属性?

记事本是先决条件,因此无法改变。

6 个答案:

答案 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,并通知最终用户使用相同的文件。

这个答案是上述讨论的总和。

非常感谢社区的帮助。如果发现任何其他解决方案的问题。请发帖给其他人:)