public static void count(String file) {//参数为java文件的绝对路径
    try {
        FileReader fReader = new FileReader(new File(file));
        BufferedReader reader = new BufferedReader(fReader);
        String line;
        int lineCount = 0;
        int codeLineCount = 0;
        int classCount = 0;
        int methodCount = 0;
        while (true) {
   line = reader.readLine();
   if (line != null) {
       lineCount++;//行数
                if (line.matches("判断方法头的正则表达式")) {
 methodCount++;//方法数
       }
       if (line.matches("判断类头的正则表达式")) {
 classCount++;//类数
       }
            } else {
      break;
            }
        }
    } catch (Exception e) {
System.out.println("exception:" + e.getMessage());
    }
}

解决方案 »

  1.   

    public static void count(String file) {//参数为java文件的绝对路径
        try {
            FileReader fReader = new FileReader(new File(file));
            BufferedReader reader = new BufferedReader(fReader);
            String line;
            int lineCount = 0;
            int codeLineCount = 0;
            int classCount = 0;
            int methodCount = 0;
            while (true) {
       line = reader.readLine();
       if (line != null) {
           lineCount++;//行数
                    if (line.matches("判断方法头的正则表达式")) {
     methodCount++;//方法数
           }
           if (line.matches("判断类头的正则表达式")) {
     classCount++;//类数
           }
                } else {
          break;
                }
            }
        } catch (Exception e) {
    System.out.println("exception:" + e.getMessage());
        }
    }
      

  2.   

    以上不是很好的方法在ibm中国上有遍文章,讲了思路自己去找找吧。
      

  3.   

    ibm有什么文章?关键字是什么,好让我去搜索。我本来是打算用语法分析其parser来做的,但对我来说觉得有难度。
      

  4.   

    ibm中国
    http://www.ibm.com/developerworks/
      

  5.   

    thinking in java上好象有一个这样的源程序是用StreamTokenizer做的
      

  6.   

    自己去看看有关反射的资料吧,我也不太明白呢,不过好像能实现
    这个代码能帮到你么?
    /**
       @version 1.1 2004-02-21
       @author Cay Horstmann
    */import java.util.*;
    import java.lang.reflect.*;public class ReflectionTest
    {  
       public static void main(String[] args)
       {  
          // read class name from command line args or user input
          String name;
          if (args.length > 0) 
             name = args[0];
          else 
          {
             Scanner in = new Scanner(System.in);
             System.out.println("Enter class name (e.g. java.util.Date): ");
             name = in.next();
          }      try
          {  
             // print class name and superclass name (if != Object)
             Class cl = Class.forName(name);
             Class supercl = cl.getSuperclass();
             System.out.print("class " + name);
             if (supercl != null && supercl != Object.class)
                System.out.print(" extends " + supercl.getName());         System.out.print("\n{\n");
             printConstructors(cl);
             System.out.println();
             printMethods(cl);
             System.out.println();
             printFields(cl);
             System.out.println("}");
          }
          catch(ClassNotFoundException e) { e.printStackTrace(); }
          System.exit(0);
       }   /**
          Prints all constructors of a class
          @param cl a class
        */
       public static void printConstructors(Class cl)
       {  
          Constructor[] constructors = cl.getDeclaredConstructors();      for (Constructor c : constructors)
          {           
             String name = c.getName();
             System.out.print("   " + Modifier.toString(c.getModifiers()));
             System.out.print(" " + name + "(");         // print parameter types
             Class[] paramTypes = c.getParameterTypes();
             for (int j = 0; j < paramTypes.length; j++)
             {  
                if (j > 0) System.out.print(", ");
                System.out.print(paramTypes[j].getName());
             }
             System.out.println(");");
          }
       }   /**
          Prints all methods of a class
          @param cl a class
        */
       public static void printMethods(Class cl)
       {  
          Method[] methods = cl.getDeclaredMethods();      for (Method m : methods)
          {  
             Class retType = m.getReturnType();
             String name = m.getName();         // print modifiers, return type and method name
             System.out.print("   " + Modifier.toString(m.getModifiers()));
             System.out.print(" " + retType.getName() + " " + name + "(");         // print parameter types
             Class[] paramTypes = m.getParameterTypes();
             for (int j = 0; j < paramTypes.length; j++)
             {  
                if (j > 0) System.out.print(", ");
                System.out.print(paramTypes[j].getName());
             }
             System.out.println(");");
          }
       }   /**
          Prints all fields of a class
          @param cl a class
        */
       public static void printFields(Class cl)
       {  
          Field[] fields = cl.getDeclaredFields();      for (Field f : fields)
          {  
             Class type = f.getType();
             String name = f.getName();
             System.out.print("   " + Modifier.toString(f.getModifiers()));
             System.out.println(" " + type.getName() + " " + name + ";");
          }
       }
    }
    核心技术里面的有关反射的代码~
      

  7.   

    我已经用编译原理里的EBNF式表达和使用语法解析器Parser解析java代码中的类和方法了。楼上的兄弟给的例子我相信也是可行的,就此结贴,谢谢大家!