文档章节

java代码统计器CodeCounter

TracyZhang
 TracyZhang
发布于 2012/06/26 02:39
字数 290
阅读 173
收藏 1

这个小程序能有效统计自己某个项目文件夹(包括子目录)下.java文件的有效代码行数、注释行数、空白行数,
试试吧。
package com.zhanglei.Java;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CodeCounter {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Counter c = new Counter("D:\\Android_space\\test\\src\\");//在这里修改目录
c.countJavaFile(c.projectPath);

}
}

class Counter {

String projectPath;
long blankLineNum = 0l;
long zhushiLineNum = 0l;
long codeLineNum = 0l;

public Counter(String projectPath) {
super();
this.projectPath = projectPath;
}

public void countJavaFile(String path) {

File f = new File(path);
if (f.isDirectory()) {
File[] childFiles = f.listFiles();
for (int i = 0; i < childFiles.length; i++) {
countJavaFile(childFiles[i].getAbsolutePath());
}
} else {
if (f.getName().matches(".*\\.java$")) {// 判断文件是否为.java文件
// blankLineNum = 0l;
// zhushiLineNum = 0l;
// codeLineNum = 0l;
parse(f);
}
}
}

public void parse(File f) {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(f));
String line = "";
Pattern blankP = Pattern.compile("^[\\s&&[^\\n]]*");
Matcher blankM;
boolean comment = false;
while ((line = br.readLine()) != null) {
line=line.trim();
blankM = blankP.matcher(line);
if (blankM.matches()) {
blankLineNum++;
} else if (line.startsWith("/*") && !(line.endsWith("*/"))) {
comment = true;
zhushiLineNum++;
} else if(line.startsWith("/*") && line.endsWith("*/")) {
zhushiLineNum++;
} else if (true == comment) {
zhushiLineNum++;
if (line.startsWith("*/")) {
comment = false;
}
} else if(line.startsWith("//")) {
zhushiLineNum++;
}
else {
codeLineNum++;
}
}
System.out.println("文件"+f.getAbsolutePath()+":累计空行数:" + blankLineNum + " ,累计注释行数:"
+ zhushiLineNum + " ,累计代码行数:" + codeLineNum);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}

© 著作权归作者所有

TracyZhang
粉丝 9
博文 56
码字总数 106794
作品 0
海淀
程序员
私信 提问
JVM性能调优监控工具使用详解

现实企业级Java开发中,有时候我们会碰到下面这些问题: ● OutOfMemoryError,内存不足 ● 内存泄露 ● 线程死锁 ● 锁争用(Lock Contention) ● Java进程消耗CPU过高 ● ...... 这些问题...

技术小能手
2018/10/30
0
0
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解

现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 ...... 这些问题在日常开发中可能被...

小天120
2014/02/10
189
0
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解

现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 ...... 这些问题在日常开发中可能被...

优雅先生
2014/01/28
150.7K
26
Jython 2.5.2 发布,Python的纯Java实现

Jython是Python的纯Java实现。她无缝地结合了Java类与Python,使用户能以Python语言的语法编写在Java虚拟机上运行的 软件。它的特点有:与相似的Java程序相比,Jython极大的的减少了编程代码...

红薯
2011/03/07
1K
1
JVM 性能调优工具 jmap

jmap 用法 示例三:histo[:live] 显示堆中对象的统计信息。 其中包括每个Java类、对象数量、内存大小(单位:字节)、完全限定的类名。打印的虚拟机内部的类名称将会带有一个’*’前缀。如果指...

业余布道师
05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Jenkins admin 密码忘记解决

一、admin密码未更改情况 1.进入\Jenkins\secrets目录,打开initialAdminPassword文件,复制密码; find / -name initialAdminPassword [root@jenkins jenkins]# cat /var/lib/jenkins/secre......

SuShine
41分钟前
5
0
LiveData原理分析

LiveData原理分析 1 LiveData简介 大部分Android应用会从网络或SQLite数据库存取数据,并根据数据更新界面。为了避免ANR,主线程中不能存取数据。而后台线程中无法更新界面。通常的做法是让后...

tommwq
55分钟前
4
0
Java描述设计模式(20):命令模式

本文源码:GitHub·点这里 || GitEE·点这里 一、生活场景 1、场景描述 智能电脑的品牌越来越多,由此诞生了一款电脑控制的APP,万能遥控器,用户在使用遥控器的时候,可以切换为自家电视的品...

知了一笑
56分钟前
4
0
java---网络编程(上)

1.1网络编程 网络编程指的是编写运行在多个设备计算机的程序,这些计算机通过网络连接起来 java.net包中提供了两种常见的网络协议的支持: TCP:TCP是传输控制层协议的缩写,它保障了两个应用...

Firefly-
今天
15
0
城市搜索插件 city-query

  今天,给大家介绍一个比较简单有用的插件city-query,大家可以从coding上面下载下来。 git clone https://gitee.com/jflsy/city-query.git   引用插件时只需要src文件下的内容就可以了...

芳缘
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部