统计Java项目下所有类中的有效代码行数。可自行添加或修改其他文件类型的数量统计。
~~注意:此代码缺少多行注释的正则表达式,统计数量存在偏差
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
/**
* 统计项目下所有有效代码的行数
*
* @author wrcb_shaojl
*
*/
public class CountSourceCodeRow {
private static int fileCount = 0;
private static int fileLineCount = 0;
private static int allLineCount = 0;
public static void countFileRows(File path) throws IOException {
// 如果是目录,递归获取
if (path.isDirectory()) {
File[] files = path.listFiles();
for (File file : files) {
countFileRows(file);
}
}
// 如果是文件
if (path.isFile()) {
// 判断文件类型
String filePathName = path.getName();
if (filePathName.endsWith(".java")) {
fileLineCount = 0;
fileCount++;
String line;
BufferedReader bufferedReader = new BufferedReader(new FileReader(path));
while ((line = bufferedReader.readLine()) != null) {
// 排除空白行和单行注释,多行注释未找到合适的正则表达式
if (line.matches("^\s*$") || line.trim().matches("\\/\\/(.*)")) {
continue;
}
fileLineCount++;
allLineCount++;
}
String[] filePaths = filePathName.split("\\\\");
String fileName = filePaths[filePaths.length - 1];
System.out.println("[FileName]: " + fileName + ", [LineCounts]:" + fileLineCount);
bufferedReader.close();
}
}
}
public static void main(String[] args) throws IOException {
// 选择一个文件路径
File file = new File("D:\\***");
countFileRows(file);
System.out.println("[FileCount]:" + fileCount + ", [allLineCount]:" + allLineCount);
}
}