遍历一个目录下所有代码的行数和注释数

首先先创建一个方法用于遍历所有该目录下的所有文件

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值