java项目代码统计

 
import java.io.BufferedReader ;
import java.io.File ;
import java.io.FileNotFoundException ;
import java.io.FileReader ;
import java.io.IOException ;
import java.util.ArrayList ;
/**
* 代码行数统计
* @author finalist
* @version 2014-7-22
*/
public class CodeCounter {
/**
* 代码行数统计
*/
public static void main ( String [] args ) {
String file = CodeCounter . class . getResource ( "/" ). getFile ();
String path = file . replace ( "target/test-classes" , "src" );
ArrayList < File > al = getFile ( new File ( path ));
for ( File f : al ) {
if ( f . getName (). matches ( ".*\\.java$" )){ // 匹配java格式的文件
count ( f );
System . out . println ( f );
}
}
System . out . println ( "统计文件:" + files );
System . out . println ( "代码行数:" + codeLines );
System . out . println ( "注释行数:" + commentLines );
System . out . println ( "空白行数:" + 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 ()) {
getFile ( child );
} else
fileArray . add ( child );
}
return 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 ( "^[ ]*$" )) { // 匹配空行
blankLines ++;
} else if ( line . startsWith ( "//" )) {
commentLines ++;
} else if ( line . startsWith ( "/*" ) && ! line . endsWith ( "*/" )) {
commentLines ++;
flag = true ;
} else if ( line . startsWith ( "/*" ) && line . endsWith ( "*/" )) {
commentLines ++;
} else if ( flag == true ) {
commentLines ++;
if ( line . endsWith ( "*/" )) {
flag = false ;
}
} else {
codeLines ++;
}
}
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 ();
}
}
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值