java FileReader與InputStreamReader的一點總結


今天在做一個練習:統計文本中某個字符串出現的次數

剛開始用的是FileReader,方法代碼如下:

  

public static int countstr(String filename, String str)
            throws FileNotFoundException, IOException {
        FileReader fr = new FileReader(filename);
        BufferedReader br = new BufferedReader(fr);
        StringBuilder strb = new StringBuilder();
        while (true) {
            String line = br.readLine();
            if (line == null) {
                break;
            }
            strb.append(line);
        }
        String result = strb.toString();
        char [] arr = result.toCharArray();
        int count = 0;
        for(int i=0;i<arr.length;i++){
            String arr1 = arr[i]+"";
            if(str.equals(arr1)){
                count ++;
            }
        }
        br.close();
        return count;
    }

我在文本里隨便寫了幾個英文字符串,發現運行沒問題。后來改成一連串漢字,發現問題來了,讀取的時候有亂碼,於是查資料發現了解決辦法代碼改成如下:

public static int countstr(String filename, String str)
            throws FileNotFoundException, IOException {
        //FileReader fr = new FileReader(filename);
        InputStreamReader isr =new InputStreamReader(new FileInputStream(filename), "GBK");
        BufferedReader br = new BufferedReader(isr);
        StringBuilder strb = new StringBuilder();
        while (true) {
            String line = br.readLine();
            if (line == null) {
                break;
            }
            strb.append(line);
        }
        String result = strb.toString();
        char [] arr = result.toCharArray();
        int count = 0;
        for(int i=0;i<arr.length;i++){
            String arr1 = arr[i]+"";
            if(str.equals(arr1)){
                count ++;
            }
        }
        br.close();
        return count;
    }

之后想了解FileReader與InputStreamReader的區別,區別如下:

  1.FileInputStream:以字節流方式讀取;FileReader:把文件轉換為字符流讀入。

  2.Reader類及其子類提供的字符流的讀取char(16位,unicode編碼),inputStream及其子類提供字節流的讀取byte(8位),所以FileReader類是將文件按字符流的方式讀取,FileInputStream則按字節流的方式讀取文件;


免責聲明!

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



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