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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM