在Linux上运行程序时,Java-newline选项未按预期工作

在Linux上运行程序时,Java-newline选项未按预期工作,java,newline,bufferedwriter,Java,Newline,Bufferedwriter,我有一个应用程序,我想在EOF将字符串作为换行符写入文件 我的程序在Linux操作系统上执行,我要写入的文件位于windows共享文件夹中 问题:当我使用eclipse在windows操作系统上运行程序时,我能够将字符串作为换行符添加到文件中。 但在Linux box上部署和运行应用程序时,字符串会添加到文件中,但不会作为换行符 例如: 假设我想将一个新字符串作为“test user”添加到文件中,它就是这样添加的 Hr usr Hi usr Jk usrtest user 我希望它是这样

我有一个应用程序,我想在EOF将字符串作为换行符写入文件

我的程序在Linux操作系统上执行,我要写入的文件位于windows共享文件夹中

问题:当我使用eclipse在windows操作系统上运行程序时,我能够将字符串作为换行符添加到文件中。 但在Linux box上部署和运行应用程序时,字符串会添加到文件中,但不会作为换行符

例如: 假设我想将一个新字符串作为“test user”添加到文件中,它就是这样添加的

Hr usr 
Hi usr
Jk  usrtest user
我希望它是这样的

Hr usr
Hi usr
Jk usrt
test user

BufferedWriter bw = new BufferedWriter(new FileWriter(fileUrl, true)); 
bw.newLine();
//didn’t write newline when I deployed it to Linux box
bw.write();
//OR
bw.append(System.lineSeperator() + “mystring”);
//didn’t write newline when I deployed it to Linux box
//OR
bw.append(“\r\n” + “mystring”);
//didn’t write newline when I deployed it to Linux box
我敢肯定,在代码方面并没有什么问题,UNIX或Windows在某些地方对换行符分离感到困惑

如有任何意见,将不胜感激

谢谢,
吉普车。

在这里找到了罪犯:

bw.append(“\r\n” + “mystring”);
正如所提到的,特征线在Linux上的行为不同。 对于Linux部署,应使用“\n”而不是“\r\n”


这个问题的一个经典解决方案是创建一个实用程序类/方法来检查JVM运行在哪个操作系统上,然后根据操作系统类型返回一个值(IMHO,这样的值的映射会很好地工作)。

除了其他注释中提到的
\n
之外,您可以尝试
String.format(“%n”)
来获得新行

甚至可以使用
System.getProperty(“line.separator”)

在本例中“\r\n”正在工作,我遇到了一个部署问题,因此它在尝试“\r\n”时没有更新web logic Server中的类


感谢您对我的帖子感兴趣。

在Windows中,newline是
\r\n
,而在Unix上它只是
\n
@johnnymapp:也想更正相同的评论(+1)。跨windows/linux工作时的已知和经典问题。@Johnnymapp您当然是正确的,但许多本机windows应用现在也只将
\n
作为换行符。记事本是现在唯一流行的一个,我不知道……作为一个旁注-请考虑投票我的答案,或选择它作为问题的答案,如果你觉得它是有用的。是的!你们都是对的,但我使用记事本在windows计算机上访问该文件。@jeevan:在windows中操作文件时要小心,以后应该在Linux下处理该文件。我在windows中编辑脚本文件时遇到问题,该文件的所有特征线都被替换为windows样式的特征线。这导致脚本在linux上无法运行。。。。。。作为一个旁注-请考虑一下这个答案,或者选择它作为问题的答案,如果你发现它有帮助。它不会让我投票,因为我的声誉水平。你可以从Java7开始。它更短,并且没有难看的字符串文字。@Michael,OP已经在使用相同的字符串文字了。我只是提供了他可能会接受的替代方案。