public class LineCounter {
public static void main(String[] args) {
String path = "D:/workspace/LineCounter";
int count = getAllJavaFilesLineCount(new File(path));
System.out.println("總行數:" + count);
}
/**
* 使用遞歸實現統計這個文件夾中(包含子孫文件夾中的)的所有.java文件的總行數
*
* @param dir
* 文件夾
* @return
*/
private static int getAllJavaFilesLineCount(File dir) {
int count = 0;
for (File file : dir.listFiles()) {
// 如果是.java文件,就統計行數
if (file.isFile() && file.getName().endsWith(".java")) {
count += FileUtils.getLineCount(file);
}
// 如果是文件夾,就遞歸調用
else if (file.isDirectory()) {
count += getAllJavaFilesLineCount(file);
}
}
return count;
}
}
public class FileUtils {
/**
* 讀取指定文件的內容,返回總行數
*
* @param file
* @return
*/
public static int getLineCount(File file) {
if (!file.isFile()) {
throw new IllegalArgumentException("請指定一個有效的文件對象!");
}
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
int count = 0;
while (reader.readLine() != null) {
count++;
}
reader.close();
return count;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}