BufferedWriter如何使用write方法實現換行
BufferedWriter write方法實現換行
BufferedWriter對象自帶newline()方法可以換行,但如果在字符串中部換行,不想用newline()方法該如何做呢?
使用\n是無法實現的,使用\n後,隻會出現一個空格,並未 實現換行,在想要實現換行的地方加入\r\n就行瞭
例如下面
File file=new File("d:/ioPractice/text.txt"); Writer fw= new FileWriter(file,true); BufferedWriter bw=new BufferedWriter(fw); String str="這是第1行\r\n這是第2行"; bw.write(str); bw.flush(); bw.close(); fw.close();
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 在三個系統中,查看該文件,都會解釋為換行。
至此,問題分析完畢。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 淺談緩沖字符流 BufferedReader BufferedWriter用法
- Java中FileWriter類的常用方法說明
- java中創建寫入文件的6種方式詳解與源碼實例
- Java中的字節,字符輸出流與字節和字符輸入流的簡單理解
- Java 如何利用緩沖流讀寫文件