Java统计目录文件下代码行数的总和,注释行数的总和,空行数总和

思路:首先要用递归遍历所有文件夹下的文件,然后记录统计出每一个文件的行数,注释行数,空行数。

package com.sina;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

/**
 * 要求如下:
 * 统计目录中所有非二进制文件的行数的总和,注释行数总和,空行数总和
 * @author itmyhome
 */

public class CodeLineCount {

    static int constant[] = new int[3];   // 定义常量数组 分别保存【行数,注释,空行】的总和

    public static void main(String[] args) {
        File f = new File("D:/tomcat/webapps");
        print(f);

        System.out.println("*********目录下所有行数总和,注释行数总和,空行行数总和如下:************");
        System.out.print("总行数:" + constant[0] + "," + ",注释:" + constant[1] + ",空行:" + constant[2]);
    }

    /**
     * 遍历文件夹
     */
    public static void print(File f) {
        File[] file = f.listFiles();

        for (int i = 0; i < file.length; i++) {
            if (file[i].isDirectory()) { // 判断是否文件夹
                print(file[i]);
            } else {
                File readfile = new File(file[i].getAbsolutePath());
                statistic(readfile); //开始统计
            }
        }
    }

    /**
     * 统计文件的总行数,注释行数,空格行数
     * 
     * @param file
     * @return 返回所有文件的行数总和
     */
    private static synchronized int[] statistic(File file) {

        int totalCount = 0; // 总行数
        int notesCount = 0; // 注释
        int spaceCount = 0; // 空格

        boolean flagNode = false;

        String regxNodeBegin = "\\s*/\\*.*"; // 注释正则
        String regxNodeEnd = ".*\\*/\\s*";
        String regx = "//.*";
        String regxSpace = "\\s*";

        BufferedReader br = null;
        try {

            String line = null;
            br = new BufferedReader(new FileReader(file));
            while ((line = br.readLine()) != null) {
                totalCount++;
                if (line.matches(regxNodeBegin) && line.matches(regxNodeEnd)) {
                    ++notesCount;
                }
                if (line.matches(regxNodeBegin)) {
                    ++notesCount;
                    flagNode = true;
                } else if (line.matches(regxNodeEnd)) {
                    ++notesCount;
                    flagNode = false;
                } else if (line.matches(regxSpace)) {
                    ++spaceCount;
                } else if (line.matches(regx)){
                    ++notesCount;
                } else if (flagNode){
                    ++notesCount;
                }

            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        //每读入一个文件后将数据保存到常量数组中
        constant[0] += totalCount; 
        constant[1] += notesCount;
        constant[2] += spaceCount;

        System.out.println("总行数:" + totalCount + ", 注释:" + notesCount + ", 空行: " + spaceCount +
                        ", 文件:" + file.getName());

        return constant;

    }
}

输出结果:

总行数:575, 注释:0, 空行: 14, 文件:fuelConsumptionFill.jsp
总行数:24, 注释:6, 空行: 6, 文件:CodeLineCount.java
总行数:26, 注释:0, 空行: 3, 文件:head.jsp
总行数:26, 注释:0, 空行: 3, 文件:index.jsp
总行数:16, 注释:0, 空行: 4, 文件:web.xml
*********目录下所有行数总和,注释行数总和,空行行数总和如下:************
总行数:667,,注释:6,空行:30

总结:当时写的时候不是很满意,回来查漏补缺,完善一下

作者:itmyhome


本文转载:CSDN博客