要求:統計一個src檔案下的所有.java檔案內的程式碼行數(註釋行、空白行不統計在內)
分析:先封裝一個靜態方法用於統計確定的.java檔案的有效程式碼行數。使用字元緩衝流讀取檔案,首先判斷是否是塊註釋開頭,接著判斷是否是塊註釋結尾,再判斷是否是單行註釋或者空白行,若都不是則是有效程式碼,統計行數+1。
對於資料夾路徑,採用遞迴的方法判斷子條目是檔案還是資料夾,是檔案就呼叫靜態統計方法。原始碼:
public class CalculateRow {
public static void main(String[] args) {
/* File file = new File("D:\\web\\zuoye\\src\\test\\CalculateRow.java") ;
calculaterow(file) ;*/
File newfile = new File("D:\\web\\zuoye\\src") ;
calculateFile(newfile) ;
File[] files = newfile.listFiles() ;
/* for(File f: files){
System.out.println(f);
}*/
/* int sum = 0 ;
for (int i = 0; i < files.length; i++) {
if(files[i].isDirectory()){
File[] filesi = files[i].listFiles() ;
for (int j = 0; j < filesi.length; j++) {
int num = calculaterow(filesi[j]);
sum+=num ;
}
}else{
int num = calculaterow(files[i]);
sum+= num ;
}
}
System.out.println(newfile+"資料夾下的檔案的程式碼行數總共有:"+sum);*/
}
public static void calculateFile(File ff){
int sum =0 ;
if(ff.isDirectory()){
File[] files = ff.listFiles() ;
for(File f1: files){
if(f1.isDirectory()){
calculateFile(f1) ;
}else{
int num =calculaterow(f1) ;
sum +=num ;
}
}
System.out.println(ff+"資料夾下的所有檔案的程式碼行數總共:"+sum);
}else if(ff.isFile()) {
int num = calculaterow(ff) ;
sum +=num ;
System.out.println(ff+"檔案下的所有檔案的 程式碼行數總共:"+sum);
}else{
System.err.println("輸入的檔案地址格式不對");
}
}
public static int calculaterow(File f){
int num= 0 ;
if(f.isFile()){
try {
BufferedReader br = new BufferedReader(new FileReader(f)) ;
String str ;
boolean flag = false ;
while((str=br.readLine())!=null){
String newstr = str.trim() ;
if(newstr.startsWith("/*")){
flag =true ;
}else if (newstr.endsWith("*/")){
flag = false ;
}
else if(newstr.startsWith("//")||newstr.length()==0){
num+=0 ;
}else if(!flag){
num+=1 ;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}else {
System.out.println("不是檔案!");
}
System.out.println(f+"檔案的程式碼行數是:"+num);
return num;
}
}
截圖: