java中讀取中文字元和非中文字元
阿新 • • 發佈:2019-01-30
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(); } }