对文件夹下的文件利用正则表达式进行空行、注释行、代码行的匹配、计数。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/**
*统计代码
*/
public class CodeConuter {
static long normalLines = 0; //正常的行
static long commentLines = 0; //注释
static long whiteLines = 0; //空白行
public static void main(String[] args) {
File f = new File("D:\\eclipse-workspace\\Filter\\src\\com\\servlet");
File[] codeFiles = f.listFiles(); //文件夹下的所有子文件
for(File child : codeFiles) { //遍历子文件
System.out.println(child.getName());
if(child.getName().matches(".*\\.java$")) { //文件名以.java结尾,进行统计
parse(child);
}
}
System.out.println("normalLines:"+normalLines);
System.out.println("commentLines:"+commentLines);
System.out.println("whiteLines:"+whiteLines);
}
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) {
//readLine把换行符去掉了
line = line.trim();
if(line.matches("^[\\s&&[^\\n]]*")) { //开头是空格且不是换行,出现0到多次,(以换行结尾) 表示是空行
whiteLines++;
}else if(line.startsWith("/*") && !line.endsWith("*/")){ //多行注释
commentLines++;
comment = true;
}else if(true == comment) { //多行注释
commentLines++;
if(line.endsWith("*/")) {
comment = false;
}
}else if(line.startsWith("/*") && line.endsWith("*/*")){ //单行注释
commentLines++;
}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();
}
}
}
}
}
/*
NoteServlet.java
normalLines:43
commentLines:6
whiteLines:10
*/