zoukankan      html  css  js  c++  java
  • 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则按字节流的方式读取文件;

  • 相关阅读:
    关于泛型
    共享几个.net工具类
    关于Guid
    自动更新解决方案
    订阅者模式实例
    好久没有blog了,今日就share一个update program的经验
    杀掉相应数据库的进程
    解决IFrame下无法写Cookie问题
    sql处理死锁
    log4net配置及使用方法
  • 原文地址:https://www.cnblogs.com/klzs226/p/8624062.html
Copyright © 2011-2022 走看看