1. 程式人生 > >Java關於條件判斷練習--統計一個src文件下的所有.java文件內的代碼行數(註釋行、空白行不統計在內)

Java關於條件判斷練習--統計一個src文件下的所有.java文件內的代碼行數(註釋行、空白行不統計在內)

stat 註釋 string 字符 條目 pub isf exc system

要求:統計一個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;
}
}

截圖:

技術分享

Java關於條件判斷練習--統計一個src文件下的所有.java文件內的代碼行數(註釋行、空白行不統計在內)