統計代碼行數
給一個文件目錄,遍歷該目錄下的所有文件,如果是.java文件,利用字符流讀取該java源文件,統計全部java文件的代碼共有多少行,java文件個數有多少提示:先獲取所有文件,如果文件名以java結尾則表示是Java文件。然后再計算所有Java文件的行數總合,以及Java文件的個數。
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
/**
* @ClassName: Work
* @Description: 1.統計代碼行數
給一個文件目錄,遍歷該目錄下的所有文件,如果是.java文件,利用字符流讀取該java源文件,統計全部java文件的代碼共有多少行,java文件個數有多少
提示:先獲取所有文件,如果文件名以java結尾則表示是Java文件。然后再計算所有Java文件的行數總
合,以及Java文件的個數。
* @author LYL
* @date 2021-01-13 11:32:40
*/
public class Work {
public static void main(String[] args) {
//需要掃描統計的路徑
File file = new File("C:\\Test");
String str = null;
try {
//調用scan方法並拿到返回的字符串
str = scan(file,0,0);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("掃描完畢");
String[] str2 = str.split(",");
//將返回出的字符串解析為數字
int lineNum = Integer.parseInt(str2[0]);
int fileNum = Integer.parseInt(str2[1]);
System.out.println("行數為:"+lineNum+",文件數為:"+fileNum);
}
public static String scan(File f,int LineNumber, int FileNumber) throws IOException {
int lineNum = LineNumber;
int fileNum = FileNumber;
// 將傳入的File對象變成File數組
File[] lf = f.listFiles();
// 如果為空則結束這次方法。避免空指針異常
if (lf == null) {
return null;
}
// 循環遍歷lf中的每個File對象
for (File f1 : lf) {
// 如果當前遍歷到的這個File對象是文件夾
if (f1.isDirectory()) {
// 得到當前文件夾的路徑
String path = f1.getAbsolutePath();
// 重新調用當前方法,並傳入剛剛遍歷到的文件夾對象,行數和文件數,並用一個String接收返回的字符串
String test = scan(new File(path),lineNum,fileNum);
String[] str2 = test.split(",");
//將拿到的返回出的字符串解析為行數和文件數
lineNum = Integer.parseInt(str2[0]);
fileNum = Integer.parseInt(str2[1]);
// 如果當前File對象是一個文件
} else {
//判斷是不是java文件
if(f1.getName().endsWith(".java")) {
fileNum++;
}
// 輸出當前文件的名稱
//System.out.println(f1.getName());
//創建當前文件的對象
File file = new File(f1.getAbsolutePath());
FileReader fr = null;
//創建字符流
fr = new FileReader(file);
int i = 0;
while((i = fr.read())!=-1) {
Character c = (char)i;
//將讀出的字符轉換為字符串
String temp = c.toString();
//判斷字符串中有沒有換行
if(temp.contains("\n")) {
lineNum++;
}
}
//關閉字符流
fr.close();
}
}
System.out.println("lineNum = "+lineNum+", fileNum = "+fileNum);
//將行數和文件數返回
return lineNum+","+fileNum;
}
}