Eclipse统计项目代码行数

本文介绍了一种无需第三方工具,利用IDE自带的查找功能和正则表达式快速统计代码行数的方法,包括排除空行和注释行。

在项目中,我们常常有统计代码行数的需要,但是如果不利用第三方工具的话,面对一个项目(甚至一个工程或解决方案中若干个项目)中成百上千的代码文件,实在有一种力不从心的感觉。

我们期望能够用最简单的方法完成这些重要却细微的需求。下面我给大家介绍一种无需借助第三方工具,无需复杂操作,无需人工统计计算的方法解决这个问题。

下面的方法就是所有的IDE都有的“查找”,在查找框中输入内容(选择正则表达式),选择好搜索范围,点击搜索则会显示匹配结果,会看到诸如: 在xxx个文件中查到xxx个匹配项。

一、Search->File


1统计代码行数:\n

2统计代码行数并排除空行:^[ \t]*[^ \t\n\r]+.*

上面的方法可以很迅速地得到代码行数,不过遗憾的是统计结果把空行(仅包含空格和制表符的行)也统计进去了,然而很多时候我们并不想把这些文本也给算进代码量里去,怎么办呢?别急,我们只要对正则表达式做一点点修改。我的思路是,只需要找出一个不是空格或制表符的字符即可,于是我写出了这个正则表达式 ^[ \t]*[^ \t\n\r]+.*$ ,它表示先忽略一行前面的连续空格和制表符,然后寻找是否有一个字符不为空格、制表符、换行符和回车符,如果有则表明这行不为空行。

3统计代码行数并排除空行和注释行:^[ \t]*[^ \t\n\r/#]+.*$

在实际项目中,我们或许认为注释行不应成为生产量,应从统计数据中排除出去。似乎这个问题棘手得多。不过别担心,只要善于利用正则表达式,这个问题也能轻松解决。

我们首先要能够对注释行有一个认识。很多程序设计语言中,注释行都会用“/”或者“#”等字符开头。我们假设项目中的注释行都是以“/”或“#”开头的(请读者考虑自己项目的特点自行修改),那么我们要查找的是一行中第一个非空字符不是“/”和“#”的行。跟上一节类似地,我们可以写出^[ \t]*[^ \t\n\r/#]+.*$ 。

二、代码实现

import java.io.BufferedReader;  
import java.io.File;  
import java.io.FileReader;  
import java.util.ArrayList;  
import java.util.List;  
   
  
public class LineCounter {  
    List<File> list = new ArrayList<File>();  
    int linenumber = 0;  
       
    FileReader fr = null;  
    BufferedReader br = null;  
   
    public void counter(String path) {  
//        String path = System.getProperty("user.dir");  
        System.out.println("项目路径"+path);  
        File file = new File(path);  
        File files[] = null;  
        files = file.listFiles();  
        addFile(files);  
        isDirectory(files);  
        readLinePerFile();  
        System.out.println("Totle:" + linenumber + "行");  
    }  
   
    // 判断是否是目录  
    public void isDirectory(File[] files) {  
        for (File s : files) {  
            if (s.isDirectory()) {  
                File file[] = s.listFiles();  
                addFile(file);  
                isDirectory(file);  
                continue;  
            }  
        }  
    }  
   
    //将src下所有文件组织成list  
    public void addFile(File file[]) {  
        for (int index = 0; index < file.length; index++) {  
            list.add(file[index]);  
            // System.out.println(list.size());  
        }  
    }  
       
    //读取非空白行  
    public void readLinePerFile() {  
        try {  
            for (File s : list) {  
                int yuan = linenumber;  
                if (s.isDirectory()) {  
                    continue;  
                }  
                if(s.getName().lastIndexOf(".java")>0||s.getName().lastIndexOf(".jsp")>0||s.getName().lastIndexOf(".js")>0||s.getName().lastIndexOf(".css")>0)  
                {  
                      
                }else{  
                    continue;  
                }  
                fr = new FileReader(s);  
                br = new BufferedReader(fr);  
                String i = "";  
                while ((i = br.readLine()) != null) {  
                    if (isBlankLine(i))  
                        linenumber++;  
                }  
                System.out.print(s.getName());  
                System.out.println("\t\t有" + (linenumber - yuan) + "行");  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            if (br != null) {  
                try {  
                    br.close();  
                } catch (Exception e) {  
                }  
            }  
            if (fr != null) {  
                try {  
                    fr.close();  
                } catch (Exception e) {  
                }  
            }  
        }  
    }  
   
    //是否是空行  
    public boolean isBlankLine(String i) {  
        if (i.trim().length() == 0) {  
            return false;  
        } else {  
            return true;  
        }  
    }  
       
    public static void main(String args[]) {  
        LineCounter lc = new LineCounter();  
        lc.counter("W:/workspaces/wm/xxProject"); //$NON-NLS-1$  
    }  
}  

参考文献:

1、http://www.cnblogs.com/bitzhuwei/p/how-many-lines-in-project.html

2、http://blog.youkuaiyun.com/xiangtianzaijie500/article/details/53096709

3、http://www.cnblogs.com/javawebsoa/archive/2013/05/04/3059993.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值