public static void main(String[] args) {
// 初始时向任务队列中添加一个任务
// File dir = new File("E:/Test");
File dir = new File("C:/my_project");
taskQueue.add(dir);
// 执行队表中的所有任务
executeDirFilesLineCountTasks();
// 显示最终结果
System.out.println("总行数:" + count);
}
// 任务队列
private static LinkedList<File> taskQueue = new LinkedList<File>();
// 统计结果
private static int count = 0;
/**
* 执行任务:统计一个文件夹下所有文件的总行数,并且把所有的子文件夹作为新任务添加到任务队列中
*
*/
public static void executeDirFilesLineCountTasks() {
// 循环办理任务队表所有的的任务
while (taskQueue.size() > 0) {
// 1,从任务队列中取出一个任务
File dir = taskQueue.removeFirst();
// 2,办理这个任务
// >> a, 取出这个文件夹中所有子文件与子文件夹
for (File file : dir.listFiles()) {
// >> b, 如果是文件,就统计
if (file.isFile()) {
if (file.getName().endsWith(".java")) {
count += getFileLineCount(file);
}
}
// >> c, 如果是文件夹,就作为一个新任务添加到任务队列中
else {
taskQueue.addLast(file);
}
}
}
}
/**
* 统计指定文件的行数
*
* @param file
* @return
*/
public static int getFileLineCount(File file) {
BufferedReader reader = null;
try {
// 打开文件
reader = new BufferedReader(new FileReader(file));
// 读一行就加1,直到读完全部行
int count = 0;
while (reader.readLine() != null) {
count++;
}