项目代码行统计工具(Java实现)_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 项目代码行统计工具(Java实现)

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

 2012/6/29 16:37:12  zhengkaifl  程序员俱乐部  我要评论(0)
  • 摘要:最近突然想看看自己所开发的项目的规模是多大,在网上找了半天硬是没找到一个很好的代码行统计工具。于是自己实现了一个简易版的代码行统计工具,先分享如下:importjava.io.File;importjava.io.FileReader;importjava.io.IOException;importjava.io.LineNumberReader;importorg.apache.commons.lang.StringUtils;publicclassProjectCountLine
  • 标签:实现 工具 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();
        }
    }*/
}

?

发表评论
用户名: 匿名