突然想計(jì)算下項(xiàng)目行數(shù),比較簡單瑰艘,直接上碼
/**
* Description:
* <p>計(jì)算項(xiàng)目代碼行數(shù)</p>
* Create by hry
*/
public class Foo {
private String [] ignore = {
"ees-migration",
//"ees-proxy",
"ees-task",
};
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Test
public void foo(){
String path = "e:/project/ry/dev";
File srcfolder = new File(path);
if(!srcfolder.exists()){
return;
}
HashMap<String, File> objectObjectHashMap = new HashMap<>();
Map<String, File> map = showAllFiles(srcfolder, objectObjectHashMap);
assert map != null;
logger.info("共有文件{}個(gè)",map.size());
int num = 0;
for(File file : map.values()){
//int line = getLine(file, "http://", "/*", "*/", "*");
int line = getLine(file);
num += line;
}
logger.info("總行數(shù):{}",num);
}
/**
* 獲取文件夾下所有文件
* @param file 必須為一個(gè)文件夾
* @param data 初始化為分配空間但空間內(nèi)無數(shù)據(jù)的map
*/
private Map<String,File> showAllFiles(File file, Map<String, File> data){
File[] files = file.listFiles();
if(files == null || files.length == 0){
return null;
}
for (File f : files) {
if (f.isDirectory()) {
showAllFiles(f,data);
} else {
data.put(f.getPath(),f);
}
}
return data;
}
/**
* 計(jì)算文件有效行數(shù)
* 匹配指定格式文件(java)捶障,設(shè)置匹配規(guī)則Patton
* 計(jì)算行數(shù)
* patton: 文件行內(nèi)包含該字符的會被忽略
* file : 具體文件
*/
private int getLine(File file,String...patton){
if(!file.getName().endsWith(".java")){
return 0;
}
int temp = 0;
try {
String line;
BufferedReader fileReader = new BufferedReader(new FileReader(file));
while ((line = fileReader.readLine()) != null){
if(line.trim().length() == 0){
continue;
}
boolean flag = true;
/**
* 計(jì)算行數(shù)
* 每行內(nèi)存在patton的字符則過濾僧须,不予計(jì)算
*/
if(patton != null && patton.length > 0){
List<String> strings = Arrays.asList(patton);
for(String p : strings){
if(line.contains(p)){
flag = false;
break;
}
}
}
if(flag){
temp ++;
}
}
} catch (IOException e) {
e.printStackTrace();
}
return temp;
}
}