Java统计目录文件下代码行数的总和,注释行数的总和,空行数总和
思路:首先要用递归遍历所有文件夹下的文件,然后记录统计出每一个文件的行数,注释行数,空行数。
package com.sina;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
/**
* 要求如下:
* 统计目录中所有非二进制文件的行数的总和,注释行数总和,空行数总和
* @author itmyhome
*/
public class CodeLineCount {
static int constant[] = new int[3]; // 定义常量数组 分别保存【行数,注释,空行】的总和
public static void main(String[] args) {
File f = new File("D:/tomcat/webapps");
print(f);
System.out.println("*********目录下所有行数总和,注释行数总和,空行行数总和如下:************");
System.out.print("总行数:" + constant[0] + "," + ",注释:" + constant[1] + ",空行:" + constant[2]);
}
/**
* 遍历文件夹
*/
public static void print(File f) {
File[] file = f.listFiles();
for (int i = 0; i < file.length; i++) {
if (file[i].isDirectory()) { // 判断是否文件夹
print(file[i]);
} else {
File readfile = new File(file[i].getAbsolutePath());
statistic(readfile); //开始统计
}
}
}
/**
* 统计文件的总行数,注释行数,空格行数
*
* @param file
* @return 返回所有文件的行数总和
*/
private static synchronized int[] statistic(File file) {
int totalCount = 0; // 总行数
int notesCount = 0; // 注释
int spaceCount = 0; // 空格
boolean flagNode = false;
String regxNodeBegin = "\\s*/\\*.*"; // 注释正则
String regxNodeEnd = ".*\\*/\\s*";
String regx = "//.*";
String regxSpace = "\\s*";
BufferedReader br = null;
try {
String line = null;
br = new BufferedReader(new FileReader(file));
while ((line = br.readLine()) != null) {
totalCount++;
if (line.matches(regxNodeBegin) && line.matches(regxNodeEnd)) {
++notesCount;
}
if (line.matches(regxNodeBegin)) {
++notesCount;
flagNode = true;
} else if (line.matches(regxNodeEnd)) {
++notesCount;
flagNode = false;
} else if (line.matches(regxSpace)) {
++spaceCount;
} else if (line.matches(regx)){
++notesCount;
} else if (flagNode){
++notesCount;
}
}
} catch (Exception e) {
e.printStackTrace();
}
//每读入一个文件后将数据保存到常量数组中
constant[0] += totalCount;
constant[1] += notesCount;
constant[2] += spaceCount;
System.out.println("总行数:" + totalCount + ", 注释:" + notesCount + ", 空行: " + spaceCount +
", 文件:" + file.getName());
return constant;
}
}
输出结果:
总行数:575, 注释:0, 空行: 14, 文件:fuelConsumptionFill.jsp
总行数:24, 注释:6, 空行: 6, 文件:CodeLineCount.java
总行数:26, 注释:0, 空行: 3, 文件:head.jsp
总行数:26, 注释:0, 空行: 3, 文件:index.jsp
总行数:16, 注释:0, 空行: 4, 文件:web.xml
*********目录下所有行数总和,注释行数总和,空行行数总和如下:************
总行数:667,,注释:6,空行:30
总结:当时写的时候不是很满意,回来查漏补缺,完善一下
作者:itmyhome