首先先创建一个方法用于遍历所有该目录下的所有文件
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MyJavaCode {
//正则表达式的匹配格式匹配换行符
private static Pattern p = Pattern.compile("\\n");
//匹配注释
private static Pattern p1 = Pattern.compile("(\\//)|(/\\*\\*)|(\\*)");
//计数器用计算代码的总行数
private int count =0; ;
//计数器用于计算注释的行数
private int zhushi =0;
public void showFileTree(File dir) {
// 获取目录中所有的子file对象(数组);
File[] files = dir.listFiles();
if (files != null) {
for (int i = 0; i < files.length; i++) {
// 获取一个file 对象
File f = files[i];
// 获取文件的绝对路径(目标资源再次pan的完整路径)
String fpath = f.getAbsolutePath();
// System.out.println(fpath);
if (new MyJavaFiler().accept(f)) {
String s = readToString(fpath);
//匹
Matcher m = p.matcher(s);
Matcher m1 = p1.matcher(s);
while (m.find()) {
count++;
}
while (m1.find()) {
zhushi++;
}
}
// System.out.println(f.getName());
// 判断F对象是否是一个目录
if (f.isDirectory()) {
showFileTree(f);
}
}
}
}
在的得到所有文件之后,需要一个方法去读取到文件下的内容
/读取文件的内的内容
public static String readToString(String filePath) {
BufferedReader br = null;
try {
FileInputStream fis = new FileInputStream(filePath);
br = new BufferedReader(new InputStreamReader(fis));
String str = null;
StringBuffer buff = new StringBuffer("");
while ((str = br.readLine()) != null) {
buff.append(str).append("\n");
}
return buff.toString();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
由于我想要的是java文件下的所有代码和注释数所以我需要一个过滤器把所有的java文件删选出来,新建一个类,并是实现文件过滤器接口
import java.io.File;
import java.io.FileFilter;
public class MyJavaFiler implements FileFilter{
@Override
public boolean accept(File pathname) {
return pathname.getName().toLowerCase().endsWith(".java");
}
}```
回到之前的类的主方法,调用即可
public static void main(String[] args) {
File dir = new File("/Users/apple/jva");
MyJavaCode code = new MyJavaCode();
code.showFileTree(dir);
System.out.println(“代码:” + code.count + “行”);
System.out.println(“注释:” + code.zhushi + “行”);
}
}
![运行结果如下](https://img-blog.csdnimg.cn/20200712222248583.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RlYXdpbmV5,size_16,color_FFFFFF,t_70)