如果要统计项目的代码量(行数),需要对整个项目的每一个文件进行统计,很是麻烦。另外,如果是想要查找或者替换项目中的某个词语,一个一个文件找,也是一件麻烦的事情,靠猜的又不是很靠谱,很容易漏掉一些。不过话说回来,这都是一些比较简单的事情,应该让程序自己去做,岂不是很方便。
我用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) { } } } } }
原文:http://blog.csdn.net/i5suoi/article/details/19076741