统计文件下的java文件的个数、代码行数、空行数、注释行数。用到了BufferedReader、FileReader、递归和正则表达式

package cn.wzt;

import java.io.*;
import java.util.Scanner;

public class Ex4 {
    public static int wenjian=0;
    public static int zonghang=0;
    public static int konghang=0;
    public static int zhushi=0;
    public static void main(String[] args){
        //F:\ideaxm\app2022\08io\src\main\java\cn\wzt\Ex4.java
        System.out.print("请输入地址:");
        Scanner scanner = new Scanner(System.in);
        select(scanner.next());
        System.out.printf("共有%d个java文件,总行%d行,空行%d行,注释行%d行", wenjian,zonghang,konghang,zhushi);

    }
    public static void select(String file){
        select(new File(file));
    }
    /** 
    * @Description: 递归遍历文件
    * @Param: [file]
    * @return: void
    * @Author: wzt
    * @Date: 2022/1/21 17:04
    */
    public static void select(File file){
        if (file.isDirectory()){
            for (File t : file.listFiles()) {
                if(t.isDirectory()){
                    select(t);
                }else {
                    panduan(t);
                }
            }
        }else {
            panduan(file);
        }
    }

    /** 
    * @Description: 判断记录行号
    * @Param: [file]
    * @return: void
    * @Author: wzt
    * @Date: 2022/1/21 17:10
    */
    public static void panduan(File file) {
        try (var bu = new BufferedReader(new FileReader(file))){
            if (file.isFile()&&file.getName().endsWith(".java")){
                //java文件数
                ++wenjian;
                //总行
                zonghang+=bu.lines().count();
                //空行
                BufferedReader bu2 = new BufferedReader(new FileReader(file));
                //lines()返回一个 Stream,其元素是从此 BufferedReader 读取的行
                //filter()返回由与给定谓词匹配的此流的元素组成的流
                //trim()返回一个字符串,其值为该字符串,删除了所有前导和尾随空格,其中空格定义为代码点小于或等于“U+0020”(空格字符)的任何字符
                   //count()返回此流中元素的计数。这是归约的一种特殊情况,相当于: return mapToLong(e -> 1L).sum();这是终端操作
                konghang+=bu2.lines().filter(e->e.trim().length()==0).count();
                //注释行
                BufferedReader bu3 = new BufferedReader(new FileReader(file));
                //"/\\*|\\*|//"表示/*或*或//
                zhushi+=bu3.lines().filter(e->e.trim().matches("((/\\*|\\*|//).*|.*//[a-zA-Z_0-9\\u4e00-\\u9fa5\\s]*$)")).count();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值