最近写了软件著作权的文档,里面设计了 代码量,在网上找到了如下代码(原作者原谅我吧,找不到你的连接了),用来统计代码行数.蛮不错的.
package com.io;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class CodeCounter
{
static long normalLines = 0;
static long commentLines = 0;
static long whiteLines = 0;
static long operatorLines = 0;
static int i = 0;
public static void main(String[] args)
{
File f = new File("D:/workspace/IMTC_WEB");
count(f);
System.out.println("normalLines:" + normalLines);
System.out.println("commentLines:" + commentLines);
System.out.println("whiteLines:" + whiteLines);
System.out.println("operatorLines:" + operatorLines);
}
private static void count(File f)
{
File[] codeFiles = f.listFiles();
for (File child : codeFiles)
{
System.out.println(child);
if (child.isDirectory())
{
count(child);
}
else
{
if (child.getName().matches(".*\\.jsp"))
{
parse(child);
}
}
}
}
private static void parse(File f)
{
BufferedReader br = null;
boolean comment = false;
try
{
br = new BufferedReader(new FileReader(f));
String line = "";
while ((line = br.readLine()) != null)
{
i++;
line = line.trim();
//開頭是空白字符,並且不是\n(換行符),出現0次或多次.結束一定是\n
//readLine()方法把每行的\n去掉了,所有結尾沒有\n
//if (line.matches("^[\\s&&[^\\n]]*\\n$"))
if (line.matches("^[\\s&&[^\\n]]*$"))
{
whiteLines++;
}
else if ((line.startsWith("{") && line.length() == 1)
|| (line.startsWith("}") && line.length() == 1))
{
operatorLines++;
}
else if (line.startsWith("//"))
{
commentLines++;
}
else if (line.startsWith("/*") && !line.endsWith("*/"))
{
commentLines++;
comment = true;
}
else if (line.startsWith("/*") && line.endsWith("*/"))
{
commentLines++;
}
else if (true == comment)
{
commentLines++;
if (line.endsWith("*/"))
{
comment = false;
}
}
else
{
normalLines++;
}
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
if (br != null)
{
try
{
br.close();
br = null;
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
}
统计代码量
最新推荐文章于 2024-03-13 15:56:44 发布