Java关于BufferedWriter.newline()换行的注意事项

    最近项目中需要导出文件,其实导出文件是一个挺简单的事情。但是却遇到了很奇怪的问题。

    首先导出到文件需要用到 BufferedWriter。而换行则是通过 bw.newline() 方法,问题将出在 newline() 方法上面。

    我们看一下 newline() api:

 1     /**
 2      * Writes a line separator.  The line separator string is defined by the
 3      * system property <tt>line.separator</tt>, and is not necessarily a single
 4      * newline ('\n') character.
 5      *
 6      * @exception  IOException  If an I/O error occurs
 7      */
 8     public void newLine() throws IOException {
 9     write(lineSeparator);
10     }
    英文本身应该没有什么难度,意思是:newLine 方法会调用系统的换行符。而这就是问题的根本。

 

    不同系统的换行符:

    windows -->   \r\n

    linux\nux  -->   \n

    mac         -->   \r

 【\r 是回车,return

  \n 是换行,newline】

    我们一般开发是在 windows 下开发,而服务器一般情况下都是 linux。

    如果我们使用 newline 函数换行,在本机测试的时候,因为是 windows 环境,换行符是 \r\n ,打开文件时候自然文件是换行处理,没有问题。

   当我们部署到服务器时候,服务器是 linux 环境,newline 读取系统换行符是 \r ,导出到文件,文件的换行符是 \r,当我们把这个文件通过浏览器下载到 windows 时候,再打开文件将会出现没有换行的问题。因为 windows 下对于 \r 的解释并不是换行符。

   所以,我们在不同系统开发时候,如果需要指定文件在某些地方换行,则不能使用 newline 方法。

 必须手动指定换行符:\r\n 

 因为在三个系统中,查看该文件, \r\n 都会解释为换行。

    以上。

 

posted on 2018-01-09 21:22  清风吹斜阳  阅读(7802)  评论(0编辑  收藏  举报

导航