1. 程式人生 > >java中讀取中文字元和非中文字元

java中讀取中文字元和非中文字元



import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

public class FileReadTest {
	private String fileName;
	
	public FileReadTest(String file){
		this.fileName=file;
	}
	//讀取帶有中文的檔案用 FileInputStream(fileName),"UTF-8");這樣讀取檔案就會直接用UTF-8解碼,不用再做編碼轉換。
	public void ChineseRead(){
		try {
                      //InputStreamReader 是位元組流通向字元流的橋樑,它將位元組流轉換為字元流.
                       InputStreamReader in=null;
			try {
				in = new InputStreamReader(new FileInputStream(fileName),"UTF-8");
			} catch (UnsupportedEncodingException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
         //BufferedReader 由Reader類擴充套件而來,提供通用的緩衝方式文字讀取,將文字寫入字元
輸出流,緩衝各個字元,從而提供單個字元、陣列和字串的高效寫入。   BufferedReader read=new BufferedReader(in); String tmp; try { while((tmp=read.readLine())!=null){ System.out.println(tmp); } } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } }  //FileReader繼承了InputStreamReader,但並沒有實現父類中帶字符集引數的建構函式,所以FileReader只能按系統預設的字符集來解碼, //然後在UTF-8 -> GBK -> UTF-8的過程中編碼出現損失,造成結果不能還原最初的字元。   public void codeRead(){ String file="D:/my/code.sh"; try { //FileReader類從InputStreamReader類繼承而來。該類按字元讀取流中資料。   BufferedReader read=new BufferedReader(new FileReader(file)); String tmpString; try { while((tmpString=read.readLine())!=null){ System.out.println(tmpString); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { FileReadTest myfile=new FileReadTest("D:/my/code.sh"); myfile.ChineseRead(); myfile.codeRead(); } }