import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class GetSourceCodeSumLine {
    /**
     * @param args
     */
    public static void main(String[] args) {
// 方法1
        String JavaSourceCodeDir[] = { "E:\\...\\src", "G:\\...\\src" };
        long codeCountLine = getJavaSourceCodeCountLine(JavaSourceCodeDir);

// 方法2
//        ArrayList<String> JavaSourceCodeDirs = new ArrayList<String>();
//        JavaSourceCodeDirs.add("G:\\workspace\\...\\src");
//        JavaSourceCodeDirs.add("G:\\workspace\\...\\src");
//        long codeCountLine = getJavaSourceCodeCountLine(JavaSourceCodeDirs);

        System.out.println(JavaSourceCodeDir.toString() + ":共有 "
                + codeCountLine + " 行java源代码");
    }
    
    
    public static long getJavaSourceCodeCountLine(String[] JavaSourceCodeDirs) {
        long codeCountLine = 0;
        for (String dirPath : JavaSourceCodeDirs) {
            File fl = new File(dirPath);
            if (fl.exists()) {
                codeCountLine += getJavaFileCountLine(fl);
            }
        }
        return codeCountLine;
    }
    
    public static long getJavaSourceCodeCountLine(ArrayList<String> JavaSourceCodeDirs) {
        long codeCountLine = 0;
        for (String dirPath : JavaSourceCodeDirs) {
            File fl = new File(dirPath);
            if (fl.exists()) {
                codeCountLine += getJavaFileCountLine(fl);
            }
        }
        return codeCountLine;
    }

    private static long getJavaFileCountLine(File fl) {
        long javaCodeCountLine = 0;

        if (fl != null && fl.exists()) {
            if (fl.isDirectory()) {
                File[] listFiles = fl.listFiles();
                for (File file : listFiles) {
                    javaCodeCountLine += getJavaFileCountLine(file);
                }
            } else if (fl.isFile() && !fl.isHidden()) {

      // 过滤源码的后缀坠
                if (fl.getName().endsWith(".java")) {

                    FileReader fr = null;
                    BufferedReader br = null;
                    try {
                        fr = new FileReader(fl);
                        br = new BufferedReader(fr);
                        while (br.readLine() != null)
                            javaCodeCountLine++;
                        br.close();
                        fr.close();
                    } catch (Exception e) {
                    } finally {
                        if (fr != null) {
                            try {
                                fr.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            } finally {
                                fr = null;
                            }
                        }
                        if (br != null) {
                            try {
                                br.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            } finally {
                                br = null;
                            }
                        }
                    }
                }

            }
        }
        return javaCodeCountLine;
    }
}

最新文章

  1. SpringMVC学习(一)
  2. HDU 4509 湫湫系列故事——减肥记II(线段树-区间覆盖 或者 暴力技巧)
  3. Intel DPDK的一些参资料
  4. dbvisualizer中文乱码
  5. FFT一周目开坑!
  6. Delphi中ShellExecute使用详解(详细解释10种显示状态)
  7. [科普]MinGW vs MinGW-W64及其它
  8. Dynamics CRM2016 Web Api之分页查询
  9. [Swift]LeetCode924.尽量减少恶意软件的传播 | Minimize Malware Spread
  10. cassandra vs mongo (1)存储引擎
  11. SQLServer之创建标量函数
  12. 修复服务器上出现ImportError: cannot import name main的问题
  13. [转]理解Go语言中的nil
  14. Python open 对应的参数
  15. HDOJ-1806 ( Frequent values ) 线段树区间合并
  16. [转载]windows下安装Python虚拟环境virtualenv,virtualenvwrapper-win
  17. java debugger
  18. 20145204 《Java程序设计》第2周学习总结
  19. 将SQLAlchemy对象转化为dict
  20. BZOJ4889 &amp; 洛谷3759:[TJOI2017]不勤劳的图书管理员——题解

热门文章

  1. 再次写了第一个servlet
  2. java监听事件
  3. java--反射和注解
  4. java_web学习(15)jQuery
  5. js架构设计模式——你对MVC、MVP、MVVM 三种组合模式分别有什么样的理解?
  6. 时钟(AnalogClock和DigitalClock)的功能与用法
  7. Pomelo的Filter
  8. C实现类、继承、多态
  9. MyBatis 模糊查询
  10. Atom 编辑器系列视频课程