- import java.io.*;
- import java.util.*;
- class JavaCounter
- {
- private int fileCount; //记录java文件数目
- private int rowCount; //记录代码行数
- private int classCount ; //记录类数量
- private Properties classes = new Properties(); //记录所有的类名,里面每一个元素都是 (类名:个数) 成对出现
- private int maxClassCount ; //记录最多类名的次数
- private String maxClassName; //记录最多类名的名称
- public static void main(String[] args) throws IOException
- {
- JavaCounter javaCounter = new JavaCounter();
- javaCounter.countFiles(new File("F://javasourcecode"));
- //javaCounter.countFiles(new File("e:/t1102/j2se"));
- javaCounter.countMaxClassName();
- javaCounter.saveInfo("javaInfo.txt");
- javaCounter.saveClasses("classInfo.txt");
- }
- //扫描指定的目录,记录该路径下能找的到的java源文件的数目
- public void countFiles(File dir) throws IOException{
- //列出该目录下的所有文件,做循环
- File[] files = dir.listFiles();
- for(int i=0;i
- //如果是个文件
- if(files[i].isFile()){
- //如果是java文件,则文件数目加1,调用方法计算该文件中的行数
- if(files[i].getName().endsWith(".java")){
- this.fileCount++;
- this.countRows(files[i]);//a.java
- }else if(files[i].getName().endsWith(".class")){//如果是class文件,则调用方法计算类数量
- this.countClasses(files[i].getName());
- }
- }
- //如果是个路径,则嵌套调用本方法
- else{
- countFiles(files[i]);
- }
- }
- }
- //扫描指定的java文件,记录文件中代码的行数
- public void countRows(File javaFile) throws IOException{
- //构造成BufferedReader,便于记录行数
- BufferedReader br = new BufferedReader(new FileReader(javaFile));
- String line;
- while( (line=br.readLine())!=null ){
- this.rowCount++;
- }
- br.close();
- }
- //记录类的数量,并将类名存储起来
- public void countClasses(String className){//b.c
- this.classCount++;
- className = className.substring(0,className.length()-6);
- //判断集合里是否已经有同名的类,如果有的话就将其值加1,如果没有就新增一个
- if(classes.getProperty(className)!=null){
- int count = Integer.parseInt(classes.getProperty(className));
- classes.setProperty(className,count+1+"");
- }else{
- classes.setProperty(className,1+"");
- }
- }
- //统计最大的类名的个数
- public void countMaxClassName(){
- Enumeration enu = classes.propertyNames();
- while(enu.hasMoreElements()){
- String cname = (String)enu.nextElement();
- int c = Integer.parseInt(classes.getProperty(cname));
- if(c>maxClassCount){
- maxClassCount=c;
- maxClassName=cname;
- }
- }
- }
- //将这几个变量的信息输出到一个文件保存起来
- public void saveInfo(String fileName) throws IOException{
- PrintWriter pw = new PrintWriter(new FileWriter(fileName));
- pw.println("java源文件个数:"+this.fileCount);
- pw.println("共计行数:"+this.rowCount);
- pw.println("共计类数:"+this.classCount);
- pw.println("最多的类名是:"+this.maxClassName+",出现了 "+this.maxClassCount+" 次");
- pw.close();
- }
- //将类名及其数量保存起来
- public void saveClasses(String fileName) throws IOException{
- FileOutputStream fos = new FileOutputStream(fileName);
- this.classes.store(fos,"all classes and classes count");
- fos.close();
- }
- }