資源描述:
《java讀取txt文本文件亂碼解決方案》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、Java讀取TXT文本文件亂碼解決方案今天在解析一個文本文件的時候出現(xiàn)了亂碼,以前從未遇到,花了點時間解決了,在此總結(jié)一下:首先,先看一下解析的代碼:privateString[]getProjectData(Filefile){String[]data=null;try{BufferedReaderbr=newBufferedReader(newFileReader(file));Stringstr=br.readLine();data=str.split("t");br.close();}catch(FileNot
2、FoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}returndata;}這個方法很簡單,就是獲取txt文件中的一行數(shù)據(jù),然后轉(zhuǎn)換為數(shù)組,我這個文本中只有一行。就這種情況下獲取到的str是亂碼,我想出現(xiàn)亂碼肯定是字符集編碼的問題,然后自己新建了一個文本文檔測試沒有問題(開始用的文本時別的程序?qū)С龅模晕夜烙嬍情_始那個txt文件編碼的問題,查看發(fā)現(xiàn)是Unicode編碼(如何查看txt的編碼呢,教你一個笨笨的辦法:
3、打開文件——另存為,然后看到最下面的編碼,默認(rèn)選擇的就是當(dāng)前文檔的編碼格式),問題就出現(xiàn)在這里。問題找到了就好解決了,修改代碼為:privateString[]getProjectData(Filefile){String[]data=null;try{BufferedReaderbr=newBufferedReader(newInputStreamReader(newFileInputStream(file),"UTF-16"));Stringstr=br.readLine();data=str.split("t")
4、;br.close();}catch(FileNotFoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}returndata;}使用文件流讀取,轉(zhuǎn)換編碼為“UTF-16”,這樣亂碼問題就解決了。歸納一下:txt文本文檔有四種編碼選項:ANSI、Unicode、Unicodebigendian、UTF-8;默認(rèn)應(yīng)該是ANSI選項,就是系統(tǒng)的默認(rèn)編碼,一般是GBK,這種情況下用第一段代碼解析是沒有問題的,也不需要轉(zhuǎn)碼;其
5、他格式就需要用第二段代碼對應(yīng)轉(zhuǎn)碼了,Unicode對應(yīng)UTF-16,UTF-8就不用說了。關(guān)于獲取txt文件編碼,我們可能有時候需要用程序獲取,動態(tài)判斷,這里給一點資料,參考參考:ANSI:無格式定義Unicode:前兩個字節(jié)為FFFEUnicode文檔以0xFFFE開頭Unicodebigendian:前兩字節(jié)為FEFFUTF-8:前兩字節(jié)為EFBBUTF-8以0xEFBBBF開頭用程序取出前幾個字節(jié)并進(jìn)行判斷即可。packagecom.syscan.oa.util;importjava.io.BufferedRead
6、er;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;importjava.util.ArrayList;importjava.util.List;publicclassReadWritTxtFileIO{publicstaticvoidmain(Str
7、ing[]args){//ReadDate();////WriteDate();Stringpath="d:/file4.txt";String[]str=writeToDat(path);System.out.println("str.length=="+str.length);for(inti=0;i8、ngth=="+splitStr.length);for(intj=0;j