实现起来很简单
做一个读文件的方法,
用java.io.*里边ReadBuffer具体的看一下JDK帮助
用ReadBuffer先读出文件
类似下面的方法
      int i = 0;
      ReadBuffer rb = new ReadBuffer("test.txt"); 
      while(rb.readline()){
          i++;
    }
返回i就是你文件的行数
就OK了

解决方案 »

  1.   

    对于注释行,可以校验行里是否包含// 或/*什么的如果有就continue不执行i++
      

  2.   

    给你个完整的
    使用方法:第一个参数为文件路径,第二个参数为需要统计的文件后缀名
    比如java,等,可以有多个后缀,中间用逗号格开,比如c,cpp可以递归的,可以统计一个文件夹下面所有java文件的总行数,非常方便
    import java.io.File;
    import java.util.*;
    import java.io.*;public class LineCounter {
        
        static List fileExts=new ArrayList();
        static boolean verbose=false;
        
        public static void main(String [] args) throws Exception {
            
            if(args.length<2) {
                return;
            }
            
            String path=args[0];
            String exts=args[1];
            
            if(args.length>2) {
                String v=args[2];
                if(v!=null) {
                    verbose=true;
                }
            }
            
            StringTokenizer stok=new StringTokenizer(exts, ",");
            while(stok.hasMoreTokens()) {
                String ext=stok.nextToken();
                fileExts.add(ext);
            }
            
            System.out.println("path="+path+" exts=\""+exts+"\" lines=" +countFileLines(path));
        }
        
        public static long countFileLines(String path) throws Exception {
            long lines=0;
            
            List childFiles=getChildFiles(path);
            
            for(Iterator iter=childFiles.iterator(); iter.hasNext(); ) {
                String childFile=(String) iter.next();
                lines+=countFile(childFile);
            }
            
            List childDirs=getChildDirs(path);
            for(Iterator iter=childDirs.iterator(); iter.hasNext(); ) {
                String childDir=(String) iter.next();
                lines+=countFileLines(childDir);
            }
            return lines;
        }
        
        public static long countFile(String path) throws Exception {
            for(Iterator iter=fileExts.iterator(); iter.hasNext();) {
                String ext=(String) iter.next();
                if(path.endsWith(ext)) {
                    BufferedReader fileReader=new BufferedReader(new FileReader(path));
                    long count=0;
                    while(true) {
                        String line=fileReader.readLine();
                        if(line==null) break;
                        count++;
                    }
                    fileReader.close();
                    if(verbose) System.out.println("file="+path+" lines="+count);
                    return count;
                }
            }
            return 0;
        }
        
        public static List getChildDirs(String path) throws Exception {
            List dirs=new ArrayList();
            File [] filelist=new File(path).listFiles();
            if(filelist==null) return dirs;
            for(int i=0; i<filelist.length; i++) {
                if(filelist[i].isDirectory()) {
                    String childPath=filelist[i].getPath();
                    dirs.add(childPath);
                }
            }
            return dirs;
        }
        
        public static List getChildFiles(String path) throws Exception {
            List files=new ArrayList();
            File [] filelist=new File(path).listFiles();
            if(filelist==null) return files;
            for(int i=0; i<filelist.length; i++) {
                if(filelist[i].isFile()) {
                    String childPath=filelist[i].getPath();
                    files.add(childPath);
                }
            }
            return files;
        }
    }
      

  3.   

    这个东西很麻烦的,要考虑很多种情况。eclipse3有一个国人实现的代码统计插件,你用google搜索“eclipse3 代码统计”,应该可以查到。