直接放在src/test/java包内运行
/**
* 代码行数统计
* @author ThinkGem
* @version 2014-7-22
*/
public class CodeCounter { public static void main(String[] args) {
//获取当前类的资源文件路径,即../../target/test-classes/
String file = CodeCounter.class.getResource("/").getFile();
// System.out.println(file);
//path=D:/Source_Code/koudaimini/src/
//设置统计根路径为src
// String path = file.replace("target/test-classes", "src");
String path = "D:\\Source_Code\\zbg\\modules\\zbg-api\\src"; ArrayList<File> al = CodeCounter.getFile(new File(path));
for (File f : al) {
if (f.getName().matches(".*\\.java$")){ // 匹配java格式的文件
CodeCounter.count(f);
System.out.println(f);
}
}
System.out.println("统计文件:" + CodeCounter.files);
System.out.println("代码行数:" + CodeCounter.codeLines);
System.out.println("注释行数:" + CodeCounter.commentLines);
System.out.println("空白行数:" + CodeCounter.blankLines);
}
static long files = 0;
static long codeLines = 0;
static long commentLines = 0;
static long blankLines = 0;
static ArrayList<File> fileArray = new ArrayList<File>(); /**
* 获得目录下的文件和子目录下的文件
* @param f
* @return
*/
public static ArrayList<File> getFile(File f) {
File[] ff = f.listFiles();
for (File child : ff) {
if (child.isDirectory()) {
CodeCounter.getFile(child);
} else {
CodeCounter.fileArray.add(child);
}
}
return CodeCounter.fileArray; } /**
* 统计方法
* @param f
*/
private static void count(File f) {
BufferedReader br = null;
boolean flag = false;
try {
br = new BufferedReader(new FileReader(f));
String line = "";
while ((line = br.readLine()) != null) {
line = line.trim(); // 除去注释前的空格
if (line.matches("^[ ]*$")) { // 匹配空行
CodeCounter.blankLines++;
} else if (line.startsWith("//")) {
CodeCounter.commentLines++;
} else if (line.startsWith("/*") && !line.endsWith("*/")) {
CodeCounter.commentLines++;
flag = true;
} else if (line.startsWith("/*") && line.endsWith("*/")) {
CodeCounter.commentLines++;
} else if (flag == true) {
CodeCounter.commentLines++;
if (line.endsWith("*/")) {
flag = false;
}
} else {
CodeCounter.codeLines++;
}
}
CodeCounter.files++;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
br = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
类似结果
D:/。。/koudaimini/src/
统计文件:46
代码行数:2798
注释行数:814
空白行数:652
javaWeb代码工程统计的更多相关文章
-
[statsvn]-svn代码量统计
用statasvn进行代码量统计的时候,第一步需要获取到项目的日志,但是我本机的svn1.4没有安装命令行,重新运行1.4的安装包也没有命令行的选项... 那就升级到最新的svn1.8好了,下载最新的 ...
-
如何创建 SVN 服务器,并搭建自己的 SVN 仓库 如何将代码工程添加到VisualSVN Server里面管理
如何创建 SVN 服务器,并搭建自己的 SVN 仓库,附链接: https://jingyan.baidu.com/article/6b97984dca0d9c1ca3b0bf40.html 如何将代 ...
-
【转】Git 代码行统计命令集
查看git上个人代码量 git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; su ...
-
IDEA 代码量统计(Statistic)
IDEA 代码量统计(Statistic) 1.1 前言 项目到了一定阶段,都会想要看看项目的代码量情况,这里主要使用插件Statistic进行代码统计查看. 1.2 安装插件步骤 找到插件市场入口并 ...
-
&ldquo;代码量统计脚本&rdquo;
概述 本文从一段统计C/C++程序脚本入手,记录shell脚本常用和重要的知识点. 代码量统计程序 文件名称,count_code_line.sh 12345678910111213141516171 ...
-
代码图形统计工具git_stats web
目录 一.简介 二.安装ruby 三.配置git_stats 四.通过nginx把网页展示出来 一.简介 仓库代码统计工具之一,可以按git提交人.提交次数.修改文件数.代码行数.注释量在时间维度上进 ...
-
mac OS X下git代码行统计命令
1.统计某人的代码提交量,包括增加,删除 git log --author=-- --until=-- --pretty=tformat: --numstat | awk '{ add += $1 ; ...
-
【转】Git代码行统计命令集
http://blog.csdn.NET/dwarven/article/details/46550117 http://blog.csdn.net/hshl1214/article/details/ ...
-
iOS纯代码工程手动快速适配
首先说下让自己的程序支持iPhone6和6+,第一种使用官方提供的launch screen.xib,这个直接看官方文档即可,这里不再多述:第二种方法是和之前iPhone5的类似,比较简单,为iPho ...
随机推荐
-
How to: 执行Action当收到数据时
本文旨在演示ActionBlock的使用. 大致流程: 输入路径--读取字节--计算--传输到打印 // Demonstrates how to provide delegates to ex ...
-
Codeforces Round #235 (Div. 2) A. Vanya and Cards
#include <iostream> using namespace std; int main(){ int n,x; cin >> n >> x; ; ; i ...
-
android开发中scrollview添加自定义view的滑动显示问题
最近做了一个实战用到自定义view,由于view比屏幕大所以想放到scrollview中,如下程序.发现不显示.于是对scrollview进行了研究. <LinearLayout xmlns:a ...
-
Android关于实现EditText中加多行下划线的的一种方法
1. 重写EditText public class LinedEditText extends EditText { private Paint linePaint; private float m ...
-
Equations(hdu 1496 二分查找+各种剪枝)
Equations Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
-
2014.12.06 ASP.NET 三级联动,添加员工,修改员工
(一)三级联动 要实现的效果: 代码: MyDBDataContext context = new MyDBDataContext(); protected void Page_Load(object ...
-
memcached+tomcat转发forward时 sessionid一直变化的问题
今天遇到了一个很奇怪的问题, 我在tomcat过滤器 中, 对请求过来的静态资源及html页面做了forword转发操作,核心代码如下: private void redirectMobile(Htt ...
-
iOS 添加WKWebView导致控制器无法释放的问题
在WkWebView与JavaScript交互中,经常会在原生中注入MessageHandler,app中注入MessageHandler的方法 WKWebViewConfiguration *con ...
-
Week 3 结对编程
Group: 杜正远 潘礼鹏 结对编程: 优点: 集体荣誉感.你们已经是一个集体了,一定得为对方着想负责. 1.看对方的代码,彼此会互相学习到一些奇妙的方法. 2.结对编程能把两个事情分开,降低复杂度 ...
-
hashcode方法 简析
package com.ycgwl; import java.util.HashMap; class People{ private String name; private int age; pub ...