项目代码行统计工具(Java实现)

    最近突然想看看自己所开发的项目的规模是多大,在网上找了半天硬是没找到一个很好的代码行统计工具。于是自己实现了一个简易版的代码行统计工具,先分享如下:

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;

import org.apache.commons.lang.StringUtils;

public class ProjectCountLine
{
    
    private static final String JAVA_FILE_SUF = "java";
    
    private static final String CSS_FILE_SUF = "css";
    
    private static final String JS_FILE_SUF = "js";
    
    private static final String JSP_FILE_SUF = "jsp";
    
    private static final String HTML_FILE_SUF = "html";
    
    private static final String PROPERTIES_FILE_SUF = "properties";
    
    private static final String VM_FILE_SUF = "vm";
    
    // 项目的跟目录
    private File rootFile = null;
    
    // 项目的行数
    private long count = 0L;
    
    /**
     * 入口方法
     * 
     * @param path 项目的根目录路径
     * @return
     * @throws IOException
     * @see [类、类#方法、类#成员]
     */
    public long service(String path)
        throws IOException
    {
        boolean flag = checkPath(path);
        
        if (flag)
            countFilesLine(rootFile);
        
        return count;
    }
    
    
    /**
     * 检查文件是否是需要统计的文件类型
     * 
     * @param fileName 文件的名称
     * @return true:文件为需要统计的文件; false:文件为不需要统计的文件
     * @see [类、类#方法、类#成员]
     */
    private boolean isCountFileType(String fileName)
    {
        if(StringUtils.isBlank(fileName))
            return false;
            
        if (fileName.endsWith(JAVA_FILE_SUF) || fileName.endsWith(CSS_FILE_SUF) || fileName.endsWith(JS_FILE_SUF)
            || fileName.endsWith(JSP_FILE_SUF) || fileName.endsWith(HTML_FILE_SUF) || fileName.endsWith(PROPERTIES_FILE_SUF)
            || fileName.endsWith(VM_FILE_SUF))
            return true;
        
        return false;
    }
    
    /**
     * 检查项目的根路径是否正确
     * 
     * @param path 项目路径
     * @return true:传入的路径是正确的; false:传入的路径不正确
     * @see [类、类#方法、类#成员]
     */
    private boolean checkPath(String path)
    {
        
        if (StringUtils.isBlank(path))
            return false;
        
        rootFile = new File(path);
        
        if (!rootFile.exists() && !rootFile.isDirectory())
            return false;
        
        return true;
    }
    
    
    /**
     * 统计指定文件下的所包含的指定格式的文件的行数
     * 
     * @param file 指定文件
     * @throws IOException 文件不存在时抛出IO异常
     * @see [类、类#方法、类#成员]
     */
    private void countFilesLine(File file)
        throws IOException
    {
        
        File[] files = file.listFiles();
        
        if (null == files)
            return;
        
        for (int i = 0; i < files.length; i++)
        {
            File tempFile = files[i];
            String fileName = tempFile.getName();
            if (fileName.endsWith("svn"))
                continue;
            
            if (tempFile.isFile())
            {
                if (isCountFileType(fileName))
                {
                    LineNumberReader linReader = new LineNumberReader(new FileReader(tempFile));
                    linReader.skip(Long.MAX_VALUE);
                    count += linReader.getLineNumber() + 1;
                }
            }
            else
            {
                // 当前为File目录,则进行递归
                countFilesLine(tempFile);
            }
        }
    }
    
/*    public static void main(String[] args)
    {
        ProjectCountLine countLine = new ProjectCountLine();
        try
        {
            long count = countLine.service("D:/MWConfigWorkSpace/MWConfig");
            System.out.println(count);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }*/
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值