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);
}
}
}