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

2014-11-24 02:42:52 · 作者: · 浏览: 1

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

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

\

实现的代码很简单,就是遍历这个文件夹下面所有的文本文件即可。实现代码如下:< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PHByZSBjbGFzcz0="brush:java;">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; /** * 项目代码统计,包含统计代码总行数功能,和查找特定字符串的位置的功能 *

* 注意:查找中文的时候,必须保证目标项目与此次项目编码格式一致 * * @author Li Shaoqing * */ public class LineCounter { /** * 项目的目录 */ String projectName = "D:/bussiness/kypg2"; /** * 要统计的文件类型 */ String str[] = new String[]{"java", "xml", "html"}; /** * 要查找的文字 */ String find = "AboutActivity"; List list = new ArrayList (); 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) { } } } } }
其实写这个东西并不是很难,也不是很麻烦,关键是要有这种思想:让程序去做这种比较简单而又麻烦的事情。这才能体现出一个程序员的优势,没有这种思想的话,不能被称作程序员,只是码农而已。