java 计算源码的行数
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;
}
}
java 计算源码的行数的更多相关文章
- 【转】Java HashMap 源码解析(好文章)
.fluid-width-video-wrapper { width: 100%; position: relative; padding: 0; } .fluid-width-video-wra ...
- java集合源码分析(三):ArrayList
概述 在前文:java集合源码分析(二):List与AbstractList 和 java集合源码分析(一):Collection 与 AbstractCollection 中,我们大致了解了从 Co ...
- java集合源码分析(六):HashMap
概述 HashMap 是 Map 接口下一个线程不安全的,基于哈希表的实现类.由于他解决哈希冲突的方式是分离链表法,也就是拉链法,因此他的数据结构是数组+链表,在 JDK8 以后,当哈希冲突严重时,H ...
- Java集合源码分析(四)Vector<E>
Vector<E>简介 Vector也是基于数组实现的,是一个动态数组,其容量能自动增长. Vector是JDK1.0引入了,它的很多实现方法都加入了同步语句,因此是线程安全的(其实也只是 ...
- Java集合源码分析(二)ArrayList
ArrayList简介 ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存. ArrayList不是线程安全的,只能用在单线程环境下,多线 ...
- 编译哈工大语言技术平台云LTP(C++)源码及LTP4J(Java)源码
转自:编译哈工大语言技术平台云LTP(C++)源码及LTP4J(Java)源码 JDK:java version “1.8.0_31”Java(TM) SE Runtime Environment ( ...
- 自学Java HashMap源码
自学Java HashMap源码 参考:http://zhangshixi.iteye.com/blog/672697 HashMap概述 HashMap是基于哈希表的Map接口的非同步实现.此实现提 ...
- Java集合类源码解析:Vector
[学习笔记]转载 Java集合类源码解析:Vector 引言 之前的文章我们学习了一个集合类 ArrayList,今天讲它的一个兄弟 Vector.为什么说是它兄弟呢?因为从容器的构造来说,Vec ...
- java HashMap源码分析(JDK8)
这两天在复习JAVA的知识点,想更深层次的了解一下JAVA,所以就看了看JAVA的源码,把自己的分析写在这里,也当做是笔记吧,方便记忆.写的不对的地方也请大家多多指教. JDK1.6中HashMap采 ...
随机推荐
- libusb 开发者指南-牛胜超(转)
源:libusb 开发者指南 libusb Developers Guidelibusb 开发者指南 原作者:Johannes Erdfelt翻译者:牛胜超 Table of Contents目录 P ...
- Python装饰器学习(九步入门)
这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 ? 1 2 3 4 5 6 7 8 # -*- coding:gbk -*- '''示 ...
- UITableView 之 取消选中
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [table ...
- Android中关闭应用的三种方式
当应用不再使用的时候,通常需要关闭应用,我们可以使用三种方式关闭android应用: 第一种方式:首先获取当前进程的id,然后杀死该进程(推荐) android.os.Process.killProc ...
- Windows7启用超级管理员administrator账户的多种方法
开启win7家庭普通版的超级管理员账户Administrotor WIN7家庭普通版没有"本地用户和组"项,不能通过"用计算机右键-管理"的方法开启超级管理员帐 ...
- Linux文件权限与目录配置
一.linux文件属性 用户组概念:假如主机有两个团体,第一个团体名为projecta,里面有class1,class2,class3:第二个团体名为projecb,里面有class4,class5, ...
- Java线程:线程交互
一.基础知识 java.lang.Object的类的三个方法: void notify():唤醒在此对象监视器上等待的单个线程. void notifyAll():唤醒在此对象监视器上等待的所有线程. ...
- Spring mvc基本原理
http://blog.csdn.net/xtu_xiaoxin/article/details/8796499 http://www.cnblogs.com/wawlian/archive/2012 ...
- lo dash api
https://lodash.com/docs 用 Lo-Dash 替换 underscore http://segmentfault.com/a/1190000000359484
- Java学习之旅基础知识篇:数据类型及流程控制
经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...