java讀寫中文文件


在用Java程序進行讀寫含中文的txt文件時,經常會出現讀出或寫入的內容會出現亂碼。原因其實很簡單,就是系統的編碼和程序的編碼采用了不同的編碼格式。通常,假如自己不修改的話,windows自身采用的編碼格式是gbk(而gbk和gb2312基本上是一樣的編碼方式),而IDE中Encode不修改的話,默認是utf-8的編碼,這就是為什么會出現亂碼的原因。當在OS下手工創建並寫入的txt文件(gbk),用程序直接去讀(utf-8),就會亂碼。為了避免可能的中文亂碼問題,最好在文件寫入和讀出的時候顯式指定編碼格式。

可以觀察其實windows下的記事本的默認的格式是ANSI,查看方式就是創建一個新的文本文件然后點擊另存為


在簡體中文Windows操作系統中,ANSI 編碼代表 GBK 編碼,所以win系統的編碼方式是gbk,不可以用utf-8去讀,

在Java中,如果我們用java.io.FileReader或者java.io.FileWriter來讀寫文件的話,固然我們可以通過 java.io.BufferedReader和java.io.BufferedWriter來提高效率,但是我們會發現在FileReader和 FileWriter中我們只能獲取編碼方式,而不能設置。這樣,在FileReader和FileWriter中的編碼設置只能服從於一些更為底層的設置,那么在讀寫多種語言編碼的文件時就很容易出現亂碼。

另外一種方法就是采用java.io.FileInputStream/java.io.InputStreamReader和 java.io.FileOutputStream/java.io.OutputStreamWriter來解決這個問題。在 InputStreamReader和OutputStreamWriter中,可以通過指定編碼方式來完成gbk文件的讀寫。

//默認情況下,win系統編碼是gbk/gbk2312,讀取和寫入時加入編碼字符集可以解決亂碼
public class ReadAndWrite {
	private static void test(){
		File firstFile = new File("D://fileone.txt");
		File secondFile=new File("D://filesecond.txt");
		BufferedReader in = null;
		BufferedWriter out = null;		
		try {		 
			in = new BufferedReader(new InputStreamReader(new FileInputStream(firstFile), "gbk"));
			out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(secondFile), "gbk"));
			String line = "";
			while((line = in.readLine())!=null){
				System.out.println(line);
				out.write(line+"\r\n");
			}
		} catch (FileNotFoundException e) {
			System.out.println("file is not fond");
		} catch (IOException e) {
			System.out.println("Read or write Exceptioned");
		}finally{			
			if(null!=in){ 
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}}
			if(null!=out){
				try {
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}}}}
}

還有一定要寫BufferedWriter out的close不然什么都不會被寫入文件的,這點至關重要!!!注意要寫入換行時,一定要\r\n,否則無效



免責聲明!

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



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