闲来无事,写了个程序,统计代码行数。
package com.io.reader;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
public class CodesLine2 {
public static void main(String[] args) {
try {
long startTime=System.currentTimeMillis();
ArrayList<File> list=getFileByDir(new File("XXX/src"));
int totalLine=getTotalLine(list);
long endTime=System.currentTimeMillis();
System.out.println("行数:"+totalLine);
System.out.println("耗时:"+(endTime-startTime));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* get a line number which is the sum of the line number of each file
* @param list
* @return
* @throws Exception
*/
private static int getTotalLine(ArrayList<File> list)throws Exception{
int totalLine=0;
for(File f:list){
BufferedReader reader=new BufferedReader(new FileReader(f));
while((reader.readLine())!=null){
totalLine++;
}
reader.close();
}
return totalLine;
}
/**
* get a file list which belong to the parameter of dir that is their parent directory
* @param dir
* @return
* @throws FileNotFoundException
*/
private static ArrayList<File> getFileByDir(File dir) throws FileNotFoundException{
ArrayList<File> result=null;
if(dir.isDirectory()){
File[] childFiles=dir.listFiles();
result=new ArrayList<File>();
for(int i=0;i<childFiles.length;i++){
if(!childFiles[i].exists()){
throw new FileNotFoundException("this file not found!");
}else{
if(childFiles[i].isFile()){
result.add(childFiles[i]);
}
else{
ArrayList<File> r=getFileByDir(childFiles[i]);
for(File f1:r){
result.add(f1);
}
}
}
}
}else{
System.out.println("this dir not a directory!");
}
return result;
}
}