统计程序的行数

public class LineCounter {
   
    static List fileExts=new ArrayList();
    static boolean verbose=false;
   
    public static void main(String [] args) throws Exception {
       
        if(args.length<2) {
            System.out.println("usage: com.founder.identity.util.LineCounter <dir> <fileExtsSeperatedByComma> [-verbose]");
            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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值