用Java编写跨不同操作系统的新行字符

用Java编写跨不同操作系统的新行字符,java,unix,solaris,newline,Java,Unix,Solaris,Newline,我有一个在UNIX服务器上生成文本文件的Java程序。然后,使用其他系统将该文本文件发送到客户的机器上,该文件应在Windows上的记事本中打开。正如我们所知,记事本将无法找到一个新的行,因为它使用Windows CR LF 我正在使用 System.getProperty("line.separator"); 是否有另一种实现平台无关性的方法,以便在UNIX上生成的文件可以在Windows记事本中以正确的格式显示,如更改某些UNIX属性以获得新行 记事本是先决条件,因此无法进行更改。否。您需

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

我正在使用

System.getProperty("line.separator");
是否有另一种实现平台无关性的方法,以便在UNIX上生成的文件可以在Windows记事本中以正确的格式显示,如更改某些UNIX属性以获得新行


记事本是先决条件,因此无法进行更改。

否。您需要选择单一文件格式,Windows或UNIX。鉴于您的客户需要记事本,您可能可以选择Windows格式,这意味着您只需要“\r\n”字符。UNIX生成文件的事实可以被认为是无关紧要的。

Mac OS X支持CR、LF和CRLF Linux使用LF,但文件也使用CRLF和CR渲染。 Windows使用CRLF

答案是:只要始终使用CRLF,就可以支持所有平台

CR='\r',LF='\n'

因此,只需创建以下格式的字符串:“mytextherebahblahblahblah\r\n”

这是错误的。您不在乎系统的行分隔符是什么。您需要以文件应该使用的格式写出一个文件。生成文件的系统是什么并不重要


文件是一个字节流。您需要写出文件格式规定您应该写入的字节流,这与任何系统使用的行分隔无关。

您是否检查过UNIX服务器是否可以容忍Windows样式的换行符?由于需要在记事本中编辑,因此需要使用
System.print(“\r\n”)
将Windows样式的换行符放入文件中

如果UNIX服务器无法处理Windows行分隔符,那么最好的选择可能是在编辑后处理该文件,以便在UNIX服务器上使用转换换行符


记事本要求意味着这不是真正的平台独立性要求,而是Unix服务器理解Windows新行的要求。

没有直接的方法可以拥有这样的可互操作的简单文本文件。因此,必须转换为doc、excel或pdf之类的结构化文件,或者简单地将格式固定到windows或UNIX上,并与最终用户通信以使用相同的格式

这个答案是上述讨论的总结


非常感谢社区的帮助。如果找到问题的其他解决方案。请为其他人发帖:)

因为Java 7
System.lineSeparator()

JavaAPI随着时间不断变化。使用Java编写跨不同操作系统的新行字符可以通过
System.lineSeparator()
API实现,该API自Java 7以来就一直存在。看看这个,

属性“line.separator”将是服务器上的行分隔符。文件就是文件就是文件。如果你想在记事本中编辑它,请使用CR LF。看起来你的问题是自相矛盾的。您需要一种方法来指定独立于平台的行分隔符,但您自己也同意,不同平台上的行分隔符是不同的:)如果您在windows上需要正确的l-s,您应该显式地编写CR LF。尽管如此,当前版本的记事本不承认unix风格的行分隔符吗?@BegemoT:这正是我的问题:)我在使用行分隔符时遇到了这个问题。我要求提供一个相同的替代方案:)如果您的unix报表和windows记事本使用不同的l-s,那么除了在两者之间使用一些转换软件之外,您无法处理它。当前的VCS(例如SVN)可以自动转换l-s,例如。然后将必须制作同一文件的两个副本,一个可以在WIndows上使用,另一个可以在UNIX上使用?但这就造成了维护它们的问题。这个问题很糟糕:)检查我的第3条评论,因此不能使用CR。如果你基本上被卡住了:-)你的客户不可能使用像Textpad这样的UNIX友好编辑器吗?生成两个文件怎么样,一个是UNIX格式,一个是Windows格式?希望到现在为止,您已经了解了两种不同格式的基本问题,并且没有一个双兼容的换行选项可供您选择?我希望自从我了解新行以来,已经出现了一个双兼容的换行选项。但事实并非如此。可能必须强制用户使用预装的记事本。其他编辑可能会给客户带来许可成本(公司的问题:)他们什么时候开始使用JAVA以外的开源软件?是的,我使用的是CSV报告,还有TXT报告。CSV在excel中很好:)TXT是造成问题的原因。至于自由编辑器,组织不允许任何没有支持的软件:通过一个:-)我认为你需要在文本文件中使用Windows格式。客户需求是第一位的。对于UNIX工作,您可以使用命令dos2unix转换您的文件以供使用,或者查看其他解决方法,但从根本上说,您似乎别无选择,只能使用CR/LF来实现良好的记事本显示。但这将导致在UNIX上查看文件时出现问题?大多数UNIX和*nixes(BSD、Darwin、Linux)使用相同的工具和编辑器等。我不认为这会带来麻烦,除非您使用的是1979年的一些古老的unix:)它的Solaris。它不会抛出任何错误,但会显示不必要的额外字符(即CR;因为LF将被解释为新行)。但是,如果要在多个系统上查看文件,该怎么办?文件格式的全部要点是允许文件在系统之间移动,而不会出现兼容性问题。如果您在文件中写入文件格式要求的内容,则该文件将是可移植的。您正在将特定于系统的内容写入一个文件中,这通常是不正确的行为。(除非在极少数情况下,文件不应
System.getProperty("line.separator");