1. 程式人生 > >java生成文字檔案linux下換行問題

java生成文字檔案linux下換行問題

         這是一個老生常談的問題,我只告訴大家我遇見的問題以及解決方案和整體思路。

         首先我們是在windows環境下開發,伺服器環境為linux,需求是生成txt檔案並下載。

         開始我用的換行符是System.getProperty("line.separator"),這是java封裝的,自動根據作業系統取到相對應的換行符的方法(之前想自己寫一個根據作業系統生成換行符的方法,後來發現有了,前人果然機智)。本地測試通過,拿到線上測試,下載下來的檔案不換行。

首先,我的反應是標準程式設計師應激反應,怎麼可能,這不科學。。。然後痛定思定,開始思考整個生成文字與顯示的流程。先是拼接字串,然後轉化為流輸出為文字檔案,然後使用者開啟文字檢視。這個流程在伺服器為windows時是沒問題的,在伺服器為linux時出現不換行的bug。我開始也沒想通哪個流程出來問題,於是用測試文字\n、\r、\r\n這三種換行符在linux上測試,結果發現\r\n是唯一好用的換行。知其然,知其所以然。幡然醒悟。使用者在開啟文字時使用的是windows環境,所以\r\n這種windows的換行就能正常顯示了,而java的System.getProperty("line.separator")方法自適應系統,所以在linux伺服器上用的是\n,而客戶用windows開啟的時候解析到\n的時候不認為是換行,自然出現了顯示的問題。

所以,顯示出問題的時候,要看生成時是否有問題,也要看顯示時是否有問題,然後看生成與展示的方式是否一致,這種思路在處理亂碼的時候尤為受用。

我不喜歡簡單的分享程式碼,我喜歡分享我思考的過程和解決問題的思路~