【大数据基础】统计某目录下的所有文本文件的单词出现频率

思路

  • 1.设置一个全局表来存放每一个出现过的单词和它的出现次数
  • 2.遍历所有文件,根据文件类型来判断是不是我们想要读取的文件
  • 3.读取文件内容
  • 4.把文件内容分割成一个个单词,并将文件中出现的单词,以及出现的次数存到全局表中
  • 5.根据出现次数从大到小排序数据
  • 6.打印出结果

实现

1.设置一个全局表来存放每一个出现过的单词和它的出现次数

这里用TreeMap方便我们排序

private static Map<String, Integer> table=new TreeMap<String, Integer>();

2.遍历所有文件,根据文件类型来判断是不是我们想要读取的文件

通过递归遍历目录下的所有文件,我们只读取c,cpp,java为后缀的文件。

    private static void statisticDir(File dir) {
        if(dir.isFile()) {
            return;
        }
        File[] fs=dir.listFiles();
        if(fs==null) {
            return;
        }
        for (File f:fs)
        {
            if (f.isFile())
            {
                String full=f.getAbsolutePath();
                if(full.endsWith(".c")||full.endsWith(".cpp")||full.endsWith(".java")) {
                    statisticFile(full);
                }
            }
            else{
                System.out.println("扫描:"+f.getAbsolutePath());//想快点可以把这行注释掉
                statisticDir(f);
            }

        }

    }

3.读取文件内容

    private static StringBuilder readFile(String file) {
        BufferedReader bufferedReader=null;
        StringBuilder stringBuilder=new StringBuilder();
        try {
            bufferedReader=new BufferedReader(new FileReader(file));
            String line=null;
            while ((line=bufferedReader.readLine())!=null) {

                stringBuilder.append(line+"\n");
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally {
            if(bufferedReader!=null) {
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        return stringBuilder;
    }

4.把文件内容分割成一个个单词,并将文件中出现的单词,以及出现的次数存到全局表中

这里将忽略单个字母的单词,支持大驼峰和小驼峰命名的单词组合拆分,例如:void setName(name);或者void SetName(Name);将被分解成4个单词。

    private static void statisticWordsBySentence(String sentence){
        int start=0;
        int end=0;
        String wo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值