java 多線程csv文件續寫和文件指定編碼

從數據庫導出數據到csv文件的時候,採用默認的utf-8編碼導致用默認程序excel打開亂碼。原因是excel打開的時候會檢測是否有bom從而決定是否使用utf編碼格式進行解碼。因此把文件轉碼爲utf-8-bom格式編碼就可以正常打開。bom佔用3個字節,EF BB BF。可以使用十六進制編輯器將EF BB BF插入到文件頭。或者使用文本編輯器修改編碼格式爲UTF-8 with Bom。這種只是暫時的修改。長期使用的話還是需要將程序的編碼修改爲GBK。

BufferedWriter writer= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file,append), "GBK"));

多個線程對同一個文件進行寫入的時候,FileOutputStream構造方法的append參數必須爲true。而且必須換行符的正確寫入。可以使用stringBuild類緩存需要寫的內容。stringBuild中每添加完成一行數據,緊跟一個換行符。查看源碼知道,換行符可以用java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("line.separator"))方法來獲取。

或者使用common-io的類

FileWriterWithEncoding writer = new FileWriterWithEncoding(file, encoding, append)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章