Java 输出文件通过 BufferedWriter.newline() 方法换行

Posted DamonWong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 输出文件通过 BufferedWriter.newline() 方法换行相关的知识,希望对你有一定的参考价值。

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

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

    我们看一下 newline() api:

    newLine  
      
    public void newLine()  
                 throws IOException  
      
    Writes a line separator. The line separator string is defined by the system property line.separator, and is not necessarily a single newline (‘\n‘) character.  
      
    Throws:  
        IOException - If an I/O error occurs  

英文本身应该没有什么难度,意思是:newLine 方法会调用系统的换行符。而这就是问题的根本。

 

    不同系统的换行符:

    windows -->   \r\n

    linux         -->   \r

    mac         -->   \n

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

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

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

   所以,我们在开发时候,如果需要指定文件在某些地方换行,则不能使用 newline 方法。必须手动指定换行符:\r\n 因为按照上面列举的不同系统换行符看,如果字符串的末尾是  \r\n 在三个系统中,查看该文件,都会解释为换行。

   至此,问题分析完毕。

 

注:参考链接:http://blog.csdn.net/TroyLemon/article/details/47781817

 

以上是关于Java 输出文件通过 BufferedWriter.newline() 方法换行的主要内容,如果未能解决你的问题,请参考以下文章

java 文件读写时 另一程序正在读写怎么办

Java IO流 处理流--缓冲流(Buffering)

java nio通过ByteBuffer输出文件信息

JAVA:已知获取文件的输出流ouputStream,怎么转换为文件

java网络编程系列之JavaIO的“前世”:BIO阻塞模型

Java 输出文件通过 BufferedWriter.newline() 方法换行