Chinaunix首页 | 论坛 | 博客
  • 博客访问: 475486
  • 博文数量: 111
  • 博客积分: 3146
  • 博客等级: 中校
  • 技术积分: 939
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-07 11:23
个人简介

Nathing

文章分类

全部博文(111)

文章存档

2016年(2)

2015年(1)

2014年(31)

2012年(2)

2011年(9)

2010年(36)

2009年(30)

我的朋友

分类: Java

2010-11-08 23:29:56

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:/A/B");
        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(".*\\.java"))
                {
                    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();
                }
            }
        }
        
    }
}


阅读(562) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~