最近需要计算整个项目的代码行数,用网上的工具还要下载、学习、使用,不如自己写一个脚本统计,还可以定制化;
方法一:运用Linux平台
在需要统计的目录下执行 (直接复制可能会有字符编码问题,建议手撸,如需统计其他形式文件行数,只需修改.java为相应文件后缀即可)
find . -name *.java -exec wc -l {} ; | awk ‘{s+=$1}END{print s}’
方法二:
以下代码只统计了.java的,有需要的话可以更改。
五千个.java文件,一百七十万代码,计算使用了6秒左右,下一步有时间可以增加多线程优化;
package com;
import java.io.*;
public class qushu {
public static void main(String[] args) throws Exception {
File f = new File("此处放置文件夹位置");
method(f);
System.out.println(fileNum);
}
public static int fileNum = 0;
public static void method(File f) throws Exception{
//首先判断是否存在
if (f.exists()) {
// 首先通过f.listFiles()该方法获取到该文件夹下面所有文件
File[] files = f.listFiles();
for (File file : files) {
// 判断文件夹下面是否有文件
if (file.isFile() && file.getName().contains(".java")) {
// 判断是否是文件,如果是计算文件行数
fileNum =fileNum + getFilePath(file.getPath());
} else if (file.isDirectory()) {
// 判断是否是文件夹,如果是子文件夹,就重复调用这个方法,这就是递归思想
method(file);
}
}
}
}
/**
* @Author 张长见
* @Description 计算文件代码行数
* @Date 2020/3/17 16:35
* @Param path 文件路径
* @return 文件行数
**/
public static int getFilePath(String path) throws Exception{
File file = new File(path);
InputStreamReader inputReader = new InputStreamReader(new FileInputStream(file));
BufferedReader bf = new BufferedReader(inputReader);
// 按行读取字符串
int str = 0;
while ((bf.readLine()) != null) {
str++;
}
bf.close();
inputReader.close();
return str;
}
}