统计代码量

最近写了软件著作权的文档,里面设计了 代码量,在网上找到了如下代码(原作者原谅我吧,找不到你的连接了),用来统计代码行数.蛮不错的.

package com.io;

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

public class CodeCounter
{
    static long normalLines = 0;
    static long commentLines = 0;
    static long whiteLines = 0;
    static long operatorLines = 0;
    static int i = 0;
    
    public static void main(String[] args)
    {
        File f = new File("D:/workspace/IMTC_WEB");
        count(f);
        System.out.println("normalLines:" + normalLines);
        System.out.println("commentLines:" + commentLines);
        System.out.println("whiteLines:" + whiteLines);
        System.out.println("operatorLines:" + operatorLines);
    }
    
    private static void count(File f)
    {
        File[] codeFiles = f.listFiles();
        for (File child : codeFiles)
        {
            System.out.println(child);
            if (child.isDirectory())
            {
                count(child);
            }
            else
            {
                if (child.getName().matches(".*\\.jsp"))
                {
                    parse(child);
                }
            }
        }
        
    }

    private static void parse(File f)
    {
        BufferedReader br = null;
        boolean comment = false;
        
        try
        {
            br = new BufferedReader(new FileReader(f));
            String line = "";
            while ((line = br.readLine()) != null)
            {
                i++;
                line = line.trim();
                //開頭是空白字符,並且不是\n(換行符),出現0次或多次.結束一定是\n
                //readLine()方法把每行的\n去掉了,所有結尾沒有\n
                //if (line.matches("^[\\s&&[^\\n]]*\\n$"))
                if (line.matches("^[\\s&&[^\\n]]*$"))
                {
                    whiteLines++;
                }
                else if ((line.startsWith("{") && line.length() == 1)
                        || (line.startsWith("}") && line.length() == 1))
                {
                    operatorLines++;
                }
                else if (line.startsWith("//"))
                {
                    commentLines++;
                }
                else if (line.startsWith("/*") && !line.endsWith("*/"))
                {
                    commentLines++;
                    comment = true;
                }
                else if (line.startsWith("/*") && line.endsWith("*/"))
                {
                    commentLines++;
                }
                else if (true == comment)
                {
                    commentLines++;
                    if (line.endsWith("*/"))
                    {
                        comment = false;
                    }
                }
                else
                {
                    normalLines++;
                }
                    
            }
            
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            if (br != null)
            {
                try
                {
                    br.close();
                    br = null;
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
        }
        
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值