java统计项目代码量及查找项目中特定词语出现的位置

如果要统计项目的代码量(行数),需要对整个项目的每一个文件进行统计,很是麻烦。另外,如果是想要查找或者替换项目中的某个词语,一个一个文件找,也是一件麻烦的事情,靠猜的又不是很靠谱,很容易漏掉一些。不过话说回来,这都是一些比较简单的事情,应该让程序自己去做,岂不是很方便。

我用java写了一个比较简单的实现,用它来统计了一个文件夹下面所有java、xml、html文件的行数,并查找到了“AboutActivity”这个词所出现的各个位置,总共用了109毫秒。有图为证:

实现的代码很简单,就是遍历这个文件夹下面所有的文本文件即可。实现代码如下:

package www.zzuli.edu.cn;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 项目代码统计,包含统计代码总行数功能,和查找特定字符串的位置的功能
 * <br/><br/>
 * 注意:查找中文的时候,必须保证目标项目与此次项目编码格式一致
 * 
 * @author Li Shaoqing
 *
 */
public class LineCounter {
	
	/**
	 * 项目的目录
	 */
	String projectName = "D:/bussiness/kypg2";
	
	/**
	 * 要统计的文件类型
	 */
	String str[] = new String[]{"java", "xml", "html"};
	
	/**
	 * 要查找的文字
	 */
	String find = "AboutActivity";

	List<File> list = new ArrayList<File>();

	int linenumber = 0;

	FileReader fr = null;
	BufferedReader br = null;

	public static void main(String args[]) {
		new LineCounter().counter();
	}

	public void counter() {
		
		Date date = new Date();
		
		File file = new File(projectName);
		File files[] = null;
		files = file.listFiles();
		
		addFile(files);
		readLinePerFile();
		System.out.println("总行数:" + linenumber + "行");
		System.out.println("统计用时:" + (new Date().getTime() - date.getTime()) + "毫秒");
		System.out.println("文件数量:" + list.size() + "个");
	}

	// 将所有符合查找类型的文件都加入到文件列表中
	public void addFile(File file[]) {
		for (int index = 0; index < file.length; index++) {
			if(file[index].isFile()){
				String name = file[index].getName().substring(file[index].getName().lastIndexOf(".") + 1);
				for(int i = 0; i < str.length; i++){
					if(name.equals(str[i])){
						list.add(file[index]);
						break;
					}
				}
			} else {
				addFile(file[index].listFiles());
			}
		}
	}

	// 统计文件
	public void readLinePerFile() {
		try {
			for (File s : list) {
				int num = 0;
				if (s.isDirectory()) {
					continue;
				}
				fr = new FileReader(s);
				br = new BufferedReader(fr);
				String i = "";
				boolean flag = true;
				while ((i = br.readLine()) != null) {
					num++;
					
					if(find != null && !find.equals("") && i.indexOf(find) != -1){
						if(flag){
							System.out.println("文件:" + s.getAbsolutePath());
							flag = false;
						}
						System.err.println("查找结果:" + num + "行," + (i.indexOf(find) + 1) + "列");
					}
				}
				if(!flag){
					System.out.println();
				}
				if(find == null || find.equals("")){
					System.out.println("文件:" + s.getAbsolutePath());
					System.out.println("总行数:" + num + "\n");
				}
				
				linenumber += num;
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (br != null) {
				try {
					br.close();
				} catch (Exception e) {
				}
			}
			if (fr != null) {
				try {
					fr.close();
				} catch (Exception e) {
				}
			}
		}
	}
}

其实写这个东西并不是很难,也不是很麻烦,关键是要有这种思想:让程序去做这种比较简单而又麻烦的事情。这才能体现出一个程序员的优势,没有这种思想的话,不能被称作程序员,只是码农而已。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吾所爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值