昨晚闲来无事,花一晚上写了一个代码,用于统计代码数,同时借机复习了文件的操作和正则表达式,贴出来共享。
/**
* 实现代码行数的统计
*/
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class CodeCounter {
static long normallines=0; //用于统计有效代码
static long commentlines=0; <span style="white-space:pre"> </span>//用于统计注释行
static long whitelines=0; //用于统计空白行
public static void count(File f){
if(!f.isDirectory()){ //如果是普通文件(后缀为.java) 就统计
if(f.getName().matches(".*\\.java$")){
parse(f);
}
}else{
File []files=f.listFiles();
for(File f1:files){
count(f1); //目录,递归
}
}
}
private static void parse(File f) {
BufferedReader br=null;
boolean comment=false;
try {
br=new BufferedReader(new FileReader(f));
String line="";
while((line=br.readLine())!=null){
line=line.trim();
if(line.matches("^[\\s&&[^\\n]]*$")){
whitelines++;
}else if(line.startsWith("/*")&&!line.endsWith("*/")){
commentlines++;
comment=true;
}else if(true==comment){
commentlines++;
if(line.endsWith("*/")){
comment=false;
}
}else if(line.startsWith("//")){
commentlines++;
}else{
normallines++;
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(br!=null)
try {
br.close();
br=null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
File file=new File("D:\\Java\\");
count(file);
System.out.println("有效代码行数:"+normallines);
System.out.println("注释行数:"+commentlines);
System.out.println("空白行数:"+whitelines);
}
}
已自己测试通过。